2017-08-11 12 views
0

forループを介して複数のリクエストを送信しています。Volley Libraryからの複数リクエストの応答を処理します

私は成功または失敗のメッセージを受け取ったので、このメッセージをAlertDialogに表示する必要があります。

私の問題は:10回のリクエストを送信しているときに10回の応答が得られているため、10回のダイアログが応答で表示されています。

私は、すべての応答が来るときに1つのダイアログを表示したいと思います。そのダイアログには、それぞれの要求ごとに応答が含まれている必要があります。

どうすればいいですか?私が試した

コード:

私はあなたの問題は globalInstance.showSuceessMessage()globalInstance.showFailureMessageあなたが応答を取得するたびに呼び出して理解したよう
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

警告ダイアログはどこにありますか? – user8256287

+0

私は、私はいくつかのIDと成功のメッセージを表示する必要がある活動の応答を取得します。 – Rims

+0

progressDialogを意味していますか? – user8256287

答えて

0

。代わりに、これらの2つの方法で

  1. Arraylist<String>を定義し、応答"Success!!! Your BookingID is: " + serverbooking_id"Booking Failed." + msgのようにそれにメッセージを追加する 成功または失敗に基づいて:私は仕事かもしれないと思うものを

    です。

  2. showMessages()のようなメソッドを定義します。このメソッドには、以前にarraylistに追加したメッセージを含むダイアログがあります。 if (checkedItems.size() > 0)ブロックにあるsendDataToServerメソッドを呼び出した後に呼び出します。
関連する問題