当compileSdkVersion升级到28时,在JsonArrayRequest中发出访问URL的问题

时间:2019-01-09 11:11:16

标签: android

当compileSdkVersion为27时,它可以正常工作,但是当compileSdkVersion为27时,它可以正常工作。 更改为28,则无法访问该网址。

我的代码

public void getCategory(final OnCategoryReceived onCategoryReceived) {
    JsonArrayRequest request = new JsonArrayRequest(Request.Method.GET, "http://my-domin.ir/api/getcategory", null, new Response.Listener<JSONArray>() {
        @Override
        public void onResponse(JSONArray response) {
            /*  progressBar.setVisibility(View.GONE);*/
            List<Category> categories = new ArrayList<>();
            for (int i = 0; i < response.length(); i++) {
                Category category = new Category();
                try {
                    JSONObject jsonObject = response.getJSONObject(i);
                    category.setId(jsonObject.getInt("id"));
                    category.setName(jsonObject.getString("name"));
                    category.setImage(jsonObject.getString("image"));
                    categories.add(category);
                } catch (JSONException e) {
                    e.printStackTrace();
                }
            }
            onCategoryReceived.onReceived(categories);
        }
    }, new Response.ErrorListener() {
        @Override
        public void onErrorResponse(VolleyError error) {
        }
    });
    request.setRetryPolicy(new DefaultRetryPolicy(18000, DefaultRetryPolicy.DEFAULT_MAX_RETRIES, DefaultRetryPolicy.DEFAULT_BACKOFF_MULT));
    Volley.newRequestQueue(context).add(request);
}

2 个答案:

答案 0 :(得分:0)

从Android 9(API级别28)开始,默认情况下禁用明文支持。选中this

您将需要创建文件 res / xml / network_security_config.xml-

<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
    <domain-config cleartextTrafficPermitted="true">
        <domain includeSubdomains="true">Your URL(ex: 127.0.0.1)</domain>
    </domain-config>
</network-security-config>

并在manifest.xml中设置以下代码以允许纯文本。

AndroidManifest.xml-

<?xml version="1.0" encoding="utf-8"?>
<manifest ...>
    <uses-permission android:name="android.permission.INTERNET" />
    <application
        android:networkSecurityConfig="@xml/network_security_config"
        ...>
        ...
    </application>
</manifest>

答案 1 :(得分:0)

从Android 9(28-Pie版本)开始,Android禁用了明文流量支持。我在Android 9版本的android中遇到了相同的问题。我只添加了

android:usesCleartextTraffic="true"

在我的<Application>的{​​{1}}标签中,对我来说,在28(9饼)中正常工作。

AndroidManifest.xml