无法连接到天气API

问题描述 投票:1回答:1

我需要一些帮助。下面是我的代码和我的错误。我是一个初学者,并使用weather.org的API.我已经搜索了所有的互联网,但所有的人都有相同的答案。是这样的

android:usesCleartextTraffic="true "andandroid:networkSecurityConfig="@xmlnetwork_security_config"

我的XML应用标签有。

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>

<application
    ...
    android:usesCleartextTraffic="true"
    android:networkSecurityConfig="@xml/network_security_config"
    ...>

    <uses-library android:name="org.apache.http.legacy"
        android:required="false"/>

</application>

而我的MainActivity是:

    public void getData(){
    final String url = "http://api.openweathermap.org/data/2.5/weather?q=Manila&appid=1fef2628db7b44791ee1029f1999137a&units=imperial";

    JsonObjectRequest req = new JsonObjectRequest(Request.Method.GET, url, null,
            new Response.Listener<JSONObject>() {

        @SuppressLint("SetTextI18n")
        @Override
        public void onResponse(JSONObject response) {


            try {
                JSONObject main_object = response.getJSONObject("main");
                JSONArray array = response.getJSONArray("weather");
                String temp = String.valueOf(main_object.getDouble("temp"));
                String city = response.getString("name");
                JSONObject country_object = response.getJSONObject("sys");
                String country = country_object.getString("country");


                Toast.makeText(MainActivity.this, "Try. Catch3", Toast.LENGTH_LONG).show();

                txtTemp.setText(temp + "°C");
                txtMyLocation.setText(city + "\n" + country);

            } catch (JSONException e) {

                e.printStackTrace();
            }
        }
    }, new Response.ErrorListener() {
        @Override
        public void onErrorResponse(VolleyError error) {
            Toast.makeText(MainActivity.this, "Error", Toast.LENGTH_LONG).show();
            //I made this toast to make sure that the error goes here and I was right. The toast shows up.
            error.printStackTrace();
        }
    }
    );
    queue = Volley.newRequestQueue(this);
    queue.add(req);
}

我的build. gradle是:

implementation 'com.android.volley:volley:1.1.0'

我的netword_security_config. xml是:

<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
    <domain-config cleartextTrafficPermitted="true">
        <domain includeSubdomains="true">http://api.openweathermap.org</domain>
    </domain-config>
</network-security-config>

然后我的错误就来了:

2020-04-30 07:46:08.094 24706-24706/com.example.demo W/BugManager: ##### register,mFd=49
2020-04-30 07:46:08.111 24706-24706/com.example.demo W/System.err: com.android.volley.NoConnectionError: java.io.IOException: Cleartext HTTP traffic to api.openweathermap.org not permitted
2020-04-30 07:46:08.111 24706-24706/com.example.demo W/System.err:     at com.android.volley.toolbox.BasicNetwork.performRequest(BasicNetwork.java:177)
2020-04-30 07:46:08.111 24706-24706/com.example.demo W/System.err:     at com.android.volley.NetworkDispatcher.processRequest(NetworkDispatcher.java:120)
2020-04-30 07:46:08.111 24706-24706/com.example.demo W/System.err:     at com.android.volley.NetworkDispatcher.run(NetworkDispatcher.java:87)
2020-04-30 07:46:08.111 24706-24706/com.example.demo W/System.err: Caused by: java.io.IOException: Cleartext HTTP traffic to api.openweathermap.org not permitted
2020-04-30 07:46:08.111 24706-24706/com.example.demo W/System.err:     at com.android.okhttp.HttpHandler$CleartextURLFilter.checkURLPermitted(HttpHandler.java:115)
2020-04-30 07:46:08.111 24706-24706/com.example.demo W/System.err:     at com.android.okhttp.internal.huc.HttpURLConnectionImpl.execute(HttpURLConnectionImpl.java:458)
2020-04-30 07:46:08.111 24706-24706/com.example.demo W/System.err:     at com.android.okhttp.internal.huc.HttpURLConnectionImpl.getResponse(HttpURLConnectionImpl.java:407)
2020-04-30 07:46:08.111 24706-24706/com.example.demo W/System.err:     at com.android.okhttp.internal.huc.HttpURLConnectionImpl.getResponseCode(HttpURLConnectionImpl.java:538)
2020-04-30 07:46:08.111 24706-24706/com.example.demo W/System.err:     at com.android.volley.toolbox.HurlStack.executeRequest(HurlStack.java:99)
2020-04-30 07:46:08.111 24706-24706/com.example.demo W/System.err:     at com.android.volley.toolbox.BasicNetwork.performRequest(BasicNetwork.java:131)
2020-04-30 07:46:08.111 24706-24706/com.example.demo W/System.err:  ... 2 more

当我编辑MainActivity.java和network_security_config.xml中的http改为https时,我得到了这个错误。

    2020-04-30 08:06:27.309 24975-24975/? I/om.example.dem: Late-enabling -Xcheck:jni
    2020-04-30 08:06:27.404 24975-24975/com.example.demo I/om.example.dem: The ClassLoaderContext is a special shared library.
    2020-04-30 08:06:27.486 24975-24975/com.example.demo I/Perf: Connecting to perf service.
    2020-04-30 08:06:27.542 24975-24975/com.example.demo W/om.example.dem: Accessing hidden method Landroid/graphics/drawable/Drawable;->getOpticalInsets()Landroid/graphics/Insets; (light greylist, linking)
    2020-04-30 08:06:27.542 24975-24975/com.example.demo W/om.example.dem: Accessing hidden field Landroid/graphics/Insets;->left:I (light greylist, linking)
    2020-04-30 08:06:27.542 24975-24975/com.example.demo W/om.example.dem: Accessing hidden field Landroid/graphics/Insets;->right:I (light greylist, linking)
    2020-04-30 08:06:27.542 24975-24975/com.example.demo W/om.example.dem: Accessing hidden field Landroid/graphics/Insets;->top:I (light greylist, linking)
    2020-04-30 08:06:27.542 24975-24975/com.example.demo W/om.example.dem: Accessing hidden field Landroid/graphics/Insets;->bottom:I (light greylist, linking)
    2020-04-30 08:06:27.587 24975-24975/com.example.demo W/om.example.dem: Accessing hidden method Landroid/view/View;->computeFitSystemWindows(Landroid/graphics/Rect;Landroid/graphics/Rect;)Z (light greylist, reflection)
    2020-04-30 08:06:27.587 24975-24975/com.example.demo W/om.example.dem: Accessing hidden method Landroid/view/ViewGroup;->makeOptionalFitsSystemWindows()V (light greylist, reflection)
    2020-04-30 08:06:27.621 24975-24975/com.example.demo W/om.example.dem: Accessing hidden method Landroid/widget/TextView;->getTextDirectionHeuristic()Landroid/text/TextDirectionHeuristic; (light greylist, linking)
    2020-04-30 08:06:27.625 24975-24975/com.example.demo W/om.example.dem: Accessing hidden method Landroid/graphics/FontFamily;-><init>()V (light greylist, reflection)
    2020-04-30 08:06:27.625 24975-24975/com.example.demo W/om.example.dem: Accessing hidden method Landroid/graphics/FontFamily;->addFontFromAssetManager(Landroid/content/res/AssetManager;Ljava/lang/String;IZIII[Landroid/graphics/fonts/FontVariationAxis;)Z (light greylist, reflection)
    2020-04-30 08:06:27.625 24975-24975/com.example.demo W/om.example.dem: Accessing hidden method Landroid/graphics/FontFamily;->addFontFromBuffer(Ljava/nio/ByteBuffer;I[Landroid/graphics/fonts/FontVariationAxis;II)Z (light greylist, reflection)
    2020-04-30 08:06:27.625 24975-24975/com.example.demo W/om.example.dem: Accessing hidden method Landroid/graphics/FontFamily;->freeze()Z (light greylist, reflection)
    2020-04-30 08:06:27.625 24975-24975/com.example.demo W/om.example.dem: Accessing hidden method Landroid/graphics/FontFamily;->abortCreation()V (light greylist, reflection)
    2020-04-30 08:06:27.625 24975-24975/com.example.demo W/om.example.dem: Accessing hidden method Landroid/graphics/Typeface;->createFromFamiliesWithDefault([Landroid/graphics/FontFamily;Ljava/lang/String;II)Landroid/graphics/Typeface; (light greylist, reflection)
    2020-04-30 08:06:27.653 24975-25019/com.example.demo I/DpmTcmClient: RegisterTcmMonitor from: $Proxy0
    2020-04-30 08:06:27.656 24975-24975/com.example.demo D/OpenGLRenderer: Skia GL Pipeline
    2020-04-30 08:06:27.659 24975-25019/com.example.demo D/NetworkSecurityConfig: Using Network Security Config from resource network_security_config debugBuild: true
    2020-04-30 08:06:27.659 24975-24975/com.example.demo W/BugManager: ##### register,mFd=48
    2020-04-30 08:06:27.676 24975-24975/com.example.demo W/System.err: com.android.volley.NoConnectionError: java.io.IOException: Cleartext HTTP traffic to api.openweathermap.org not permitted
    2020-04-30 08:06:27.676 24975-24975/com.example.demo W/System.err:     at com.android.volley.toolbox.BasicNetwork.performRequest(BasicNetwork.java:177)
    2020-04-30 08:06:27.676 24975-24975/com.example.demo W/System.err:     at com.android.volley.NetworkDispatcher.processRequest(NetworkDispatcher.java:120)
    2020-04-30 08:06:27.676 24975-24975/com.example.demo W/System.err:     at com.android.volley.NetworkDispatcher.run(NetworkDispatcher.java:87)
    2020-04-30 08:06:27.676 24975-24975/com.example.demo W/System.err: Caused by: java.io.IOException: Cleartext HTTP traffic to api.openweathermap.org not permitted
    2020-04-30 08:06:27.676 24975-24975/com.example.demo W/System.err:     at com.android.okhttp.HttpHandler$CleartextURLFilter.checkURLPermitted(HttpHandler.java:115)
    2020-04-30 08:06:27.676 24975-24975/com.example.demo W/System.err:     at com.android.okhttp.internal.huc.HttpURLConnectionImpl.execute(HttpURLConnectionImpl.java:458)
    2020-04-30 08:06:27.676 24975-24975/com.example.demo W/System.err:     at com.android.okhttp.internal.huc.HttpURLConnectionImpl.getResponse(HttpURLConnectionImpl.java:407)
    2020-04-30 08:06:27.677 24975-24975/com.example.demo W/System.err:     at com.android.okhttp.internal.huc.HttpURLConnectionImpl.getResponseCode(HttpURLConnectionImpl.java:538)
    2020-04-30 08:06:27.677 24975-24975/com.example.demo W/System.err:     at com.android.volley.toolbox.HurlStack.executeRequest(HurlStack.java:99)
    2020-04-30 08:06:27.677 24975-24975/com.example.demo W/System.err:     at com.android.volley.toolbox.BasicNetwork.performRequest(BasicNetwork.java:131)
    2020-04-30 08:06:27.677 24975-24975/com.example.demo W/System.err:  ... 2 more
    2020-04-30 08:06:27.699 24975-25024/com.example.demo I/Adreno: QUALCOMM build                   : eb3073a, I21de9e011e
    Build Date                       : 05/14/19
    OpenGL ES Shader Compiler Version: EV031.25.19.01
    Local Branch                     : 
    Remote Branch                    : refs/tags/AU_LINUX_ANDROID_LA.UM.7.1.R1.09.00.00.461.091
    Remote Branch                    : NONE
    Reconstruct Branch               : NOTHING
    2020-04-30 08:06:27.699 24975-25024/com.example.demo I/Adreno: Build Config                     : S P 6.0.9 AArch64
    2020-04-30 08:06:27.706 24975-25024/com.example.demo I/Adreno: PFP: 0x016ee180, ME: 0x00000000
    2020-04-30 08:06:27.709 24975-25024/com.example.demo I/ConfigStore: android::hardware::configstore::V1_0::ISurfaceFlingerConfigs::hasWideColorDisplay retrieved: 1
    2020-04-30 08:06:27.709 24975-25024/com.example.demo I/ConfigStore: android::hardware::configstore::V1_0::ISurfaceFlingerConfigs::hasHDRDisplay retrieved: 1
    2020-04-30 08:06:27.710 24975-25024/com.example.demo I/OpenGLRenderer: Initialized EGL, version 1.4
    2020-04-30 08:06:27.710 24975-25024/com.example.demo D/OpenGLRenderer: Swap behavior 2
    2020-04-30 08:06:27.722 24975-24975/com.example.demo V/BugManager_JNI: bug message start: fd=48,tag =0X01004801
    2020-04-30 08:06:27.722 24975-24975/com.example.demo V/BugManager_JNI: bug message copy: fd=48,msgid =6703,len=72,msg={"activity":"com.example.demo/com.example.demo.MainActivity","frames":2}
    2020-04-30 08:06:27.722 24975-24975/com.example.demo V/BugManager_JNI: bug message stop: fd =48,msgid =6703
    2020-04-30 08:06:27.807 24975-24975/com.example.demo V/BugManager_JNI: bug message start: fd=48,tag =0X01004801
    2020-04-30 08:06:27.807 24975-24975/com.example.demo V/BugManager_JNI: bug message copy: fd=48,msgid =6705,len=72,msg={"activity":"com.example.demo/com.example.demo.MainActivity","frames":4}
    2020-04-30 08:06:27.807 24975-24975/com.example.demo V/BugManager_JNI: bug message stop: fd =48,msgid =6705
    2020-04-30 08:06:31.210 24975-24975/com.example.demo V/BugManager_JNI: bug message start: fd=48,tag =0X01004801
    2020-04-30 08:06:31.211 24975-24975/com.example.demo V/BugManager_JNI: bug message copy: fd=48,msgid =6706,len=72,msg={"activity":"com.example.demo/com.example.demo.MainActivity","frames":1}
    2020-04-30 08:06:31.211 24975-24975/com.example.demo V/BugManager_JNI: bug message stop: fd =48,msgid =6706
java android android-studio weather-api
1个回答
0
投票

只是可能没有达到目的,但我是用OkHttp而不是Volley,它是来。同样,我停止工作的Volley很久以前。

总之,一个简单的例子。

OkHttpUtilAsync.class。

private final static String URL = "http://api.openweathermap.org/data/2.5/weather?q=Manila&appid=1fef2628db7b44791ee1029f1999137a&units=imperial/posts/1"; //1 object
    private final static String TAG = OkHttpUtilAsync.class.getSimpleName();

private OkHttpClient okHttpClient;
private Request request;
private String result = "";
private ResponseBody responseBody;
private MediaType mediaType;


OkHttpUtilAsync() {
    setUpClientAndRequest();
}

void fetchNetwork() {
    Log.d(TAG, "fetchNetwork()");
    okHttpClient.newCall(request).enqueue(new Callback() {
        @Override
        public void onFailure(Call call, IOException e) {
            Log.i(TAG, "onFailure()");
            call.cancel();
        }

        @Override
        public void onResponse(Call call, Response response) throws IOException {
            Log.i(TAG, "onResponse()");
            processResponse(response);


        }
    });

}

private void setUpClientAndRequest() {
    Log.w(TAG, "setUpClientAndRequest()");

    okHttpClient = new OkHttpClient();
    request = new Request.Builder().url(URL).build();
}

private void processResponse(Response response) {
    Log.i(TAG, "processResponse()");

    if (response != null) {
        Log.w(TAG, "Response not Null");

        if (response.isSuccessful()) {
            Log.wtf(TAG, "Response is Successful : " + response.isSuccessful());

            //                     responseBody = response.body(); has the RESULT
            Log.v(TAG, " result = " + response.body());


        } else {
            Log.wtf(TAG, "Response is not Successful : " + response.isSuccessful());
        }
        //close the Response
        response.close();

    } else {
        Log.w(TAG, "Response ==== Null");
    }
}

并从MainActivity调用它

OkHttpUtilAsync okHttpUtilAsync=new OkHttpUtilAsync();
        okHttpUtilAsync.fetchNetwork();

不需要设置任何清晰的文本,并从xml.gradle中删除所有这些网络安全配置。 implementation 'com.squareup.okhttp3:okhttp:3.10.0'

© www.soinside.com 2019 - 2024. All rights reserved.