Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/210.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 我无法使用截击进行网络呼叫_Android_Json_Get_Android Volley - Fatal编程技术网

Android 我无法使用截击进行网络呼叫

Android 我无法使用截击进行网络呼叫,android,json,get,android-volley,Android,Json,Get,Android Volley,当我使用jsonObject请求进行网络调用时。我没有收到任何答复。我总是收到请求的HTTP响应=如果您的应用程序在响应之前完成,则会导致连接超时。您必须在截取和重试策略中添加连接超时 JsonObjectRequest jsonObjectRequest = new JsonObjectRequest(Request.Method.POST, url, request, new Re

当我使用jsonObject请求进行网络调用时。我没有收到任何答复。我总是收到请求的HTTP响应=如果您的应用程序在响应之前完成,则会导致连接超时。您必须在截取和重试策略中添加连接超时

        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);