当前位置: 首页 > 面试题库 >

在不同线程中发出Volley请求

谢同化
2023-03-14
问题内容

我想在其他线程中使用Android Volley库发出请求。

我的意思是,线程中存在连接,UI线程中处理了数据。

我要这样做是因为我有很多连接,要处理的数据很多,现在用户界面被阻止了。

那么,如何在不同的线程中创建和启动连接,然后在UIThread中执行OnResponse()/ OnErrorResponse()?

JsonArrayRequest getReq = new JsonArrayRequest(url,new Response.Listener<JSONArray>() {

    @Override
    public void onResponse(JSONArray response) {
        Log.d("onRESPONSE Synchro -> Produit",response.toString());                                 
        PgrBarProducts.setMax(response.length());       
        percentDisplayProduct.setText("0/"+ PgrBarProducts.getMax());
        nbMaxCallNetwork = PgrBarProducts.getMax();
        try {
            for (int i = 0; i < response.length(); i++) {                                           
                JSONObject explrObject = response.getJSONObject(i);
                String id = Integer.toString((Integer) explrObject.get("id"));

                callOneObject(id, PgrBarProducts, percentDisplayProduct , 1); // appel du product
             }
        } catch (JSONException e) {
            e.printStackTrace(new PrintWriter(stackTrace));
        }                           
    }
 }, new Response.ErrorListener() {
     @Override
     public void onErrorResponse(VolleyError error) {
         changeStatutToError();
         VolleyLog.d("", "Error: " + error.getMessage());
         percentDisplayProduct.setTextColor(Color.RED);
         percentDisplayProduct.setTypeface(null, Typeface.BOLD);
         percentDisplayProduct.setText("erreur");


         waitBarProgressProduct.setVisibility(View.INVISIBLE);
         synchroProducts.setVisibility(View.VISIBLE);
     }
});

getReq.setRetryPolicy(new DefaultRetryPolicy(60 * 1000, 
    1, DefaultRetryPolicy.DEFAULT_BACKOFF_MULT));               
// Adding request to request queue and start the request        
AppController.getInstance().addToAndStartRequestQueue(getReq);

问题答案:

Volley执行的每个网络请求都在后台线程中执行。凌空在幕后照顾这件事。因此,无需在其他线程上执行请求,因为这已经在发生。

另一方面,在UI线程上调用侦听器。

当您写到数据是在UI线程上处理时,您基本上回答了自己的问题。只需将在侦听器内部执行的数据处理移至后台线程/
AsyncTask即可释放UI线程并防止阻塞。



 类似资料:
  • 我试图使用RequestFuture向服务器发出同步请求,但它不起作用。使用异步完成相同的请求时效果良好。 这是我的代码: 我得到一个nullpointerexception: Java语言lang.NullPointerException:尝试调用虚拟方法的java。lang.String组织。json。J主题。com上的null对象引用上的toString()。数学应用程序。所有模块。在com

  • 我正在使用Android截击来发出请求。所以我使用这个代码。我不明白一件事。我在服务器中检查params是否始终为null。我认为GETPARAMS()不工作。我应该做些什么来解决这个问题。

  • 我正在使用截击库。我有以下API urlhttp://example.com/project/contriller/并且需要将json请求作为body发布到它。 如何使用截击发送?

  • 问题内容: 我注意到我的应用程序无法在Pixel 3上运行。我进入android studio并模拟了一些设备,发现它在任何Android Pie(API 28)设备上均不工作,但在其他任何设备上均能正常工作。我在代码中放了一些日志,看来我在Volley使用中没有得到响应。该应用程序本身已加载,但未显示任何数据,并且收到错误消息 E / RecyclerView:未连接适配器;跳过布局 我的代码是

  • 问题内容: 我试图了解线程如何在Java中工作。这是一个简单的数据库请求,返回一个ResultSet。我正在使用JavaFx。 这将返回一个异常: 线程“线程A”中的异常java.lang.IllegalStateException:在FX应用程序线程上不;currentThread =线程A 如何正确实现线程,以便每个数据库请求都在第二个线程而不是主线程中执行? 我听说过要实现Runnable,

  • 我试图理解线程在java中是如何工作的。这是一个返回结果集的简单数据库请求。我正在使用JavaFx。 这将返回一个异常: 线程“thread A”java中出现异常。lang.IllegalStateException:不在FX应用程序线程上;currentThread=ThreadA 如何正确地实现线程,以便在第二个线程而不是主线程中执行每个数据库请求? 我听说过实现Runnable,但如何在r