2017-08-11 122 views
0

我通过for循环发送多个请求。处理来自Volley Library的多个请求的响应

作为回复,我收到成功或失败的消息,我需要在AlertDialog中显示此消息。

我的问题是:当我发送10个请求时,我得到10个响应,因此10次对话显示响应。

当所有的回应都到来时,我只想显示一个对话,而对话应该根据他们的每一个请求包含回应。

我该怎么做。

代码,我尝试:

if (globalInstance.isNetworkAvailable(AddBookingList.this)) { 
          int si = checkedItems.size(); 
          if (checkedItems.size() > 0) { 
           for (int i = 0; i < si; i++) { 
            int appid = checkedItems.get(i).getAppid(); 
            int bookingId = checkedItems.get(i).getBookingid(); 
            List<Contacts> con = db.getadvertisment(bookingId); 
            List<AddImages> img = db.getImagesbybookingId(bookingId); 
            String postXml = createxmlForPost(con, img); 
            sendDataToServer(postXml,appid, bookingId, si); 
           } 

          } 

         } 




private void sendDataToServer(final String postXml, final int appid, final int bookingId, final int si) { 
     final ProgressDialog progressDialog = new ProgressDialog(this, R.style.AppCompatAlertDialogStyle); 
     progressDialog.setMessage("Please wait..."); 
     progressDialog.setCancelable(false); 
     progressDialog.show(); 
     try { 
      final RequestQueue queue = Volley.newRequestQueue(this); 
      JSONObject obj = new JSONObject(); 
      obj.put("xmlData", postXml); 
      int socketTimeout = 30000;//30 seconds 
      final StringRequest postRequest = new StringRequest(Request.Method.POST, Constants.Rootpath + "PostBooking", 
        new Response.Listener<String>() { 
         @Override 
         public void onResponse(String st) { 
          if (progressDialog != null || progressDialog.isShowing()) { 
           progressDialog.dismiss(); 
          } 
          try { 
           JSONArray response = new JSONArray(st); 
           for (int i = 0; i < response.length(); i++) { 
            JSONObject jsonObject = response.getJSONObject(i); 
            int status = jsonObject.getInt("Status"); 
            String msg = jsonObject.getString("Msg"); 
            String serverbooking_id = jsonObject.getString("BookingId"); 
            if (status == 1) { 
             checkedItems.clear(); 
             if (response.length() > 1) { 
              String newserverbooking_id = response.getJSONObject(0).getString("BookingId") + "\n" + response.getJSONObject(1).getString("BookingId"); 
              db.updateBookingDetailsbyAppId(newserverbooking_id, appid, status); 
             } else { 
              db.updateBookingDetailsbyAppId(serverbooking_id, appid, status); 
             } 
             showDatainList(); 

             globalInstance.showSuceessMessage(true, "Success!!! Your BookingID is: " + serverbooking_id, AddBookingList.this); 
             try { 
              List<Contacts> contacts = db.getAllBookingDetails(); 
              for (int h = 0; h < contacts.size(); h++) { 
               locallySaveImagesinPhone(bookingId, contacts.get(h).get_serverbookingId()); 
              } 
             } catch (IOException e) { 
              e.printStackTrace(); 
             } 
             if (progressDialog.isShowing()) { 
              progressDialog.dismiss(); 
             } 
            } else { 
             globalInstance.showFailureMessage(false, "Booking Failed." + msg, AddBookingList.this); 

             checkedItems.clear(); 
             if (progressDialog.isShowing()) { 
              progressDialog.dismiss(); 
             } 
            } 
           } 
          } catch (JSONException e) { 
           e.printStackTrace(); 
          } 

         } 
        }, 
        new Response.ErrorListener() { 
         @Override 
         public void onErrorResponse(VolleyError error) { 
          if (progressDialog != null || progressDialog.isShowing()) { 
           progressDialog.dismiss(); 
          } 
          String msg = error.getMessage(); 
          globalInstance.showFailureMessage(false, "Booking Failed.Please Try Again!!!", AddBookingList.this); 
         } 
        } 

      ) { 
       @Override 
       protected Map<String, String> getParams() { 
        HashMap<String, String> params = new HashMap<>(); 
        params.put("xmldata", postXml); 
        return params; 
       } 
      }; 
      RetryPolicy policy = new DefaultRetryPolicy(socketTimeout, DefaultRetryPolicy.DEFAULT_MAX_RETRIES, DefaultRetryPolicy.DEFAULT_BACKOFF_MULT); 
      postRequest.setRetryPolicy(policy); 
      queue.add(postRequest); 

     } catch (JSONException e1) { 
      e1.printStackTrace(); 
      if (progressDialog != null && progressDialog.isShowing()) { 
       progressDialog.dismiss(); 
      } 
     } 
    } 
+0

哪里是alert alert的对话框? – user8256287

+0

当我得到的回应,然后在活动上我需要显示成功消息与一些ID。 – Rims

+0

您的意思是progressDialog? – user8256287

回答

0

据我了解你的问题是要求每你得到的响应时间globalInstance.showSuceessMessage()globalInstance.showFailureMessage

什么,我认为可能的工作是:除了这两种方法的

  1. ,定义Arraylist<String>并基于 成功或失败的响应添加消息像"Success!!! Your BookingID is: " + serverbooking_id"Booking Failed." + msg
  2. 定义一个类似showMessages()的方法,其中包含以前添加到arraylist中的消息的对话框。然后在if (checkedItems.size() > 0)块中的sendDataToServer方法之后调用它。