2017-07-14 14 views
0

フレンド。私はバレーのPOST要求にパラメータを付けて問題があります。リモートのMySQL DBからデータを取得し、リサイクルビューで表示する必要があります。このために、私はバレーネットワークリクエストを使用しています。パラメータがなければ、DBからすべてのデータをロードします。しかし、getParams()メソッドを追加すると、渡すパラメータに応じて対応するDBエントリが使用可能でも、null配列が返されます。ここに私のコードはAndroidのボレーはPOSTリクエストでgetParamsを呼び出さない

public void setDonorsList(final VolleyCallBack volleyCallBack) { 
    if (Utility.isNetworkEnabled) { 
     final ArrayList<Donor> listOfDonors = new ArrayList<>(); 
     final ProgressDialog progressDialog = new ProgressDialog(FindDonorResult.this); 
     progressDialog.setMessage("Loading Donors List. Please wait"); 
     progressDialog.show(); 
     StringRequest stringRequest = new StringRequest(Request.Method.POST, Constants.GET_DONORS_URL, 
       new Response.Listener<String>() { 
        @Override 
        public void onResponse(String response) { 
         progressDialog.dismiss(); 
         try { 
          listOfDonors.clear(); 
          JSONArray jsonArray = new JSONArray(response); 
          int count = 0; 
          while (count < 10) { 
           JSONObject jsonObject = jsonArray.getJSONObject(count); 
           Donor donor = new Donor(
             jsonObject.getString("fName"), jsonObject.getString("sName"), jsonObject.getString("emailid"), 
             jsonObject.getString("pass"), jsonObject.getString("mobile"), jsonObject.getString("blood"), 
             jsonObject.getString("age"), jsonObject.getString("gender"), jsonObject.getString("country"), 
             jsonObject.getString("location"), jsonObject.getString("latitude"), jsonObject.getString("longitude"), 
             jsonObject.getString("picname"), jsonObject.getString("pic") 
           ); 
           int roundedDistance = (int) distance(Double.parseDouble(donor.getLatitude()), 
             Double.parseDouble(latitude), Double.parseDouble(donor.getLongitude()), 
             Double.parseDouble(longitude)); 
           donor.setDistance(roundedDistance); 
           listOfDonors.add(donor); 
           count++; 
          } 
          Log.e("listOfDonors", String.valueOf(listOfDonors.size())); 
          volleyCallBack.onSuccess(listOfDonors); 
         } catch (JSONException e) { 
          e.getMessage(); 
         } 
        } 
       }, 
       new Response.ErrorListener() { 
        @Override 
        public void onErrorResponse(VolleyError error) { 
         error.getMessage(); 
        } 
       } 
     ){ 
      @Override 
      protected Map<String, String> getParams() throws AuthFailureError { 
       Map<String, String> params = new HashMap<>(); 
       params.put("bloodGroup", "A+"); 
       return params; 
      } 
     }; 
     NetworkRequestSingleTon.getOurInstance(FindDonorResult.this).addToRequestQue(stringRequest); 
    } else { 
     Toast.makeText(FindDonorResult.this, "No active internet connection.", Toast.LENGTH_SHORT).show(); 
    } 
} 
+0

あなたのリクエストはOKのようですが、間違っているとは思えません。サーバーでコードをデバッグして、レスポンスにnull配列が返される理由を確認する必要があります。 – FerDensetsu

+0

しかし、私の応答はnull配列を持っていません。それはDBからフェッチされたデータを含んでいます。私は結果を確認するために郵便配達員を使いました... –

答えて

0

を助けるこの

JSONObject jObj = new JSONObject(response) 
JSONArray area = jObj.getJSONArray(""); 

を使用してみてください...ですが、私はそれを考え出しました。問題はsetDonorsList()メソッドにありました。私はハード(条件番号:< 10)です。私のDBには10のエントリがないので、これは "範囲外のインデックス"というJSON例外を生成します。 while(count < jsonArray.length())のように値を変更しました。今はすべて完璧です。みんなあなたの時間と心配にとても感謝します。

0

は多分これが最後に

関連する問題