Android 我无法使用截击进行网络呼叫
当我使用jsonObject请求进行网络调用时。我没有收到任何答复。我总是收到请求的HTTP响应=如果您的应用程序在响应之前完成,则会导致连接超时。您必须在截取和重试策略中添加连接超时Android 我无法使用截击进行网络呼叫,android,json,get,android-volley,Android,Json,Get,Android Volley,当我使用jsonObject请求进行网络调用时。我没有收到任何答复。我总是收到请求的HTTP响应=如果您的应用程序在响应之前完成,则会导致连接超时。您必须在截取和重试策略中添加连接超时 JsonObjectRequest jsonObjectRequest = new JsonObjectRequest(Request.Method.POST, url, request, new Re
JsonObjectRequest jsonObjectRequest = new JsonObjectRequest(Request.Method.POST,
url,
request,
new Response.Listener<JSONObject>() {
@Override
public void onResponse(JSONObject response) {
}
}, new VolleyErrorListener(this, AuthController.LOGIN_ERROR)) {
@Override
public Map<String, String> getHeaders() throws AuthFailureError {
return new VolleyHeader().getHeaders();
}
};
jsonObjectRequest.setRetryPolicy(new DefaultRetryPolicy(
50000,
0,
DefaultRetryPolicy.DEFAULT_BACKOFF_MULT));
NetworkRequestQueue.getInstance(mContext).getRequestQueue().add(jsonObjectRequest);
JsonObjectRequest-JsonObjectRequest=newjsonobjectrequest(Request.Method.POST,
网址,
要求
新的Response.Listener(){
@凌驾
公共void onResponse(JSONObject响应){
}
},新的截击错误监听器(此,AuthController.LOGIN\u错误)){
@凌驾
公共映射getHeaders()引发AuthFailureError{
返回新的截击头();
}
};
jsonObjectRequest.setRetryPolicy(新的DefaultRetryPolicy(
50000,
0,
DefaultRetryPolicy.DEFAULT_BACKOFF_MULT));
NetworkRequestQueue.getInstance(mContext.getRequestQueue().add(jsonObjectRequest);
NetworkRequestQueue类如下所示:
public class NetworkRequestQueue {
private static NetworkRequestQueue mInstance;
private static Context mCtx;
private RequestQueue mRequestQueue;
private ImageLoader mImageLoader;
private NetworkRequestQueue(Context context) {
mCtx = context;
mRequestQueue = getRequestQueue();
mImageLoader = new ImageLoader(mRequestQueue,
new ImageLoader.ImageCache() {
private final LruCache<String, Bitmap>
cache = new LruCache<String, Bitmap>(20);
@Override
public Bitmap getBitmap(String url) {
return cache.get(url);
}
@Override
public void putBitmap(String url, Bitmap bitmap) {
cache.put(url, bitmap);
}
});
}
public static synchronized NetworkRequestQueue getInstance(Context context) {
if (mInstance == null) {
mInstance = new NetworkRequestQueue(context);
}
return mInstance;
}
public RequestQueue getRequestQueue() {
if (mRequestQueue == null) {
Cache cache = new DiskBasedCache(mCtx.getCacheDir(), 10 * 1024 * 1024);
Network network = new BasicNetwork(new HurlStack());
mRequestQueue = new RequestQueue(cache, network);
// Don't forget to start the volley request queue
mRequestQueue.start();
}
return mRequestQueue;
}
public ImageLoader getImageLoader() {
return mImageLoader;
}
公共类网络请求队列{
私有静态网络请求队列实例;
私有静态上下文mCtx;
私有请求队列mRequestQueue;
私有图像加载器;
专用网络请求队列(上下文){
mCtx=上下文;
mRequestQueue=getRequestQueue();
mImageLoader=新的图像加载器(mRequestQueue,
新建ImageLoader.ImageCache(){
私人决赛
缓存=新的LruCache(20);
@凌驾
公共位图getBitmap(字符串url){
返回cache.get(url);
}
@凌驾
公共位图(字符串url、位图){
cache.put(url、位图);
}
});
}
公共静态同步NetworkRequestQueue getInstance(上下文){
if(minInstance==null){
MinInstance=新的NetworkRequestQueue(上下文);
}
回报率;
}
公共请求队列getRequestQueue(){
if(mRequestQueue==null){
Cache Cache=new DiskBasedCache(mCtx.getCacheDir(),10*1024*1024);
网络=新的基本网络(new HurlStack());
mRequestQueue=新请求队列(缓存、网络);
//别忘了启动截击请求队列
mRequestQueue.start();
}
返回mrequest队列;
}
公共ImageLoader getImageLoader(){
返回图像加载器;
}
}另一个使用
StringRequest
获取Json响应的解决方案
private void callApi() {
RequestQueue mrequestQueue;
StringRequest stringRequest;
mrequestQueue = Volley.newRequestQueue(this);
stringRequest = new StringRequest(Request.Method.GET, DATA_URL, new Response.Listener<String>() {
@Override
public void onResponse(String response) {
try {
JSONObject jsonObject = new JSONObject(response);
System.out.println("json"+jsonObject);
} catch (JSONException e) {
e.printStackTrace();
}
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
//Log.i(TAG, "Response: " + error.toString());
}
});
mrequestQueue.add(stringRequest);
}
private void callApi(){
请求队列mrequestQueue;
StringRequest-StringRequest;
mrequestQueue=Volley.newRequestQueue(this);
stringRequest=newStringRequest(Request.Method.GET,DATA\u URL,new Response.Listener()){
@凌驾
公共void onResponse(字符串响应){
试一试{
JSONObject JSONObject=新JSONObject(响应);
System.out.println(“json”+jsonObject);
}捕获(JSONException e){
e、 printStackTrace();
}
}
},new Response.ErrorListener(){
@凌驾
公共无效onErrorResponse(截击错误){
//Log.i(标记,“Response:+error.toString());
}
});
mrequestQueue.add(stringRequest);
}
使用字符串请求尝试此操作
public class TestActivity extends AppCompatActivity {
RequestQueue requestQueue;
String DATA_URL = "http://ec2-54-147-238-136.compute-1.amazonaws.com/hmc/api/getnewsfeeds?order=asc";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
requestQueue = Volley.newRequestQueue(this);
callApi();
}
private void callApi() {
StringRequest stringRequest = new StringRequest(Request.Method.GET, DATA_URL, new Response.Listener<String>() {
@Override
public void onResponse(String response) {
Log.e("res", response);
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
Log.e("onErrorResponse: ", error.getLocalizedMessage());
}
});
requestQueue.add(stringRequest);
}
公共类测试活动扩展了AppCompative活动{
请求队列请求队列;
字符串数据\u URL=”http://ec2-54-147-238-136.compute-1.amazonaws.com/hmc/api/getnewsfeeds?order=asc";
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
requestQueue=Volley.newRequestQueue(this);
callApi();
}
私有void callApi(){
StringRequest StringRequest=新建StringRequest(Request.Method.GET,DATA\u URL,new Response.Listener()){
@凌驾
公共void onResponse(字符串响应){
Log.e(“res”,响应);
}
},new Response.ErrorListener(){
@凌驾
公共无效onErrorResponse(截击错误){
Log.e(“onErrorResponse:,error.getLocalizedMessage());
}
});
添加(stringRequest);
}
使用以下内容更改您的DefaultRetryPolicy:
DefaultRetryPolicy policy = new DefaultRetryPolicy(0,
DefaultRetryPolicy.DEFAULT_MAX_RETRIES,
DefaultRetryPolicy.DEFAULT_BACKOFF_MULT);
jsonObject.setRetryPolicy(policy);
尝试使用
StringRequest
检查我的答案。使用custom_timeout_ms=0或custom_timeout_ms=20000,因为您的请求需要时间才能获得响应。我也尝试过此解决方案,但它不起作用。我尝试了您的url,但它不起作用。只需复制粘贴并尝试。我可以获取数据。出现了什么问题?获取JSON解析错误?在响应中se\n\t
添加了前缀,您必须修复该问题。JsonRequest
您的获取JSONEXCEPTION
因为无效JSON@R2R先生!!为什么它不使用JsonObjectRequest,而是使用StringRequest?实际上,它在JsonObjectRequest中的工作也是错误部分。数据正在检查onerror代码>。json无效,这就是错误的原因。默认解析错误
DefaultRetryPolicy policy = new DefaultRetryPolicy(0,
DefaultRetryPolicy.DEFAULT_MAX_RETRIES,
DefaultRetryPolicy.DEFAULT_BACKOFF_MULT);
jsonObject.setRetryPolicy(policy);