Can I do a synchronous request with volley?

后端 未结 8 1587
执念已碎
执念已碎 2020-11-22 11:02

Imagine I\'m in a Service that already has a background thread. Can I do a request using volley in that same thread, so that callbacks happen synchronously?

There ar

相关标签:
8条回答
  • 2020-11-22 12:06

    You can do sync request with volley but you must call the method in different thread or your running app will block, it should be like this :

    public String syncCall(){
    
        String URL = "http://192.168.1.35:8092/rest";
        String response = new String();
    
    
    
        RequestQueue requestQueue = Volley.newRequestQueue(this.getContext());
    
        RequestFuture<JSONObject> future = RequestFuture.newFuture();
        JsonObjectRequest request = new JsonObjectRequest(Request.Method.GET, URL, new JSONObject(), future, future);
        requestQueue.add(request);
    
        try {
            response = future.get().toString();
        } catch (InterruptedException e) {
            e.printStackTrace();
        } catch (ExecutionException e) {
            e.printStackTrace();
        } catch (JSONException e) {
            e.printStackTrace();
        }
    
        return response;
    
    
    }
    

    after that you can call the method in thread :

     Thread thread = new Thread(new Runnable() {
                                        @Override
                                        public void run() {
    
                                            String response = syncCall();
    
                                        }
                                    });
                                    thread.start();
    
    0 讨论(0)
  • 2020-11-22 12:07

    It looks like it is possible with Volley's RequestFuture class. For example, to create a synchronous JSON HTTP GET request, you can do the following:

    RequestFuture<JSONObject> future = RequestFuture.newFuture();
    JsonObjectRequest request = new JsonObjectRequest(URL, new JSONObject(), future, future);
    requestQueue.add(request);
    
    try {
      JSONObject response = future.get(); // this will block
    } catch (InterruptedException e) {
      // exception handling
    } catch (ExecutionException e) {
      // exception handling
    }
    
    0 讨论(0)
提交回复
热议问题