正如标题所述,除非目标是https,否则我的get请求不会返回任何内容。我没有看到任何错误以进行故障排除。为了安全起见,清单中是否需要启用http?
答案 0 :(得分:1)
如果您在运行Android Pie(9.0)或更高版本的设备/仿真器上运行您的应用程序,并且看到此问题,则可能与CleartextTraffic设置为false有关,因为操作系统默认对此进行设置API级别或更高。
请参阅this SO answer here,以了解为什么这是一个问题以及如何解决。
如果您只想在测试中运行它并确保调用能够正常进行,请将此代码添加到清单中:
<?xml version="1.0" encoding="utf-8"?>
<manifest ...>
<uses-permission android:name="android.permission.INTERNET" />
<application
...
android:usesCleartextTraffic="true"
...>
...
</application>
</manifest>
它应该工作。请注意,如果我将这些应用保留在发行代码中,那么我会拒绝Play商店中的应用。
答案 1 :(得分:0)
要获取凌空错误,您需要实现凌空错误监听器,例如
StringRequest request = new StringRequest(Request.Method.POST, url,
new Response.Listener<String>() {
@Override
public void onResponse(String response) {
Log.e("response", response);
}
},
new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
error.printStackTrace();
}
}) {
@Override
protected Map<String, String> getParams() throws AuthFailureError {
return parameters;
}
@Override
public Map<String, String> getHeaders() throws AuthFailureError {
Map<String, String> headers = new HashMap<>();
......
return headers;
}
};
RequestQueue queue = Volley.newRequestQueue(Class.this);
queue.add(request);
}