2017-06-04 93 views
0

我打電話給一個異步任務,它返回一個json對象,其中包含結果,消息作爲字符串,結果作爲成本。爲字符串獲取Json異常

雖然它顯示結果,響應對象中的消息字符串它顯示json異常作爲結果沒有值。

的AsyncTask

public class SearchPostsAsyncTask extends AsyncTask<String, Void, JSONObject> { 
    String api; 
    JSONObject jsonParams; 
    Context mContext; 
    private SearchPostsCallBack searchPostsCallBack; 
    private ProgressDialog loadingDialog; 
    private Snackbar snackbar; 
    private LinearLayout parentLayout; 
    private ArrayList<PostDelivery> list; 
    private JSONArray listsArray; 
    private JSONObject jsonObject; 

    public SearchPostsAsyncTask(Context context, LinearLayout linearLayout,SearchPostsCallBack searchPostsCallBack) { 

     this.mContext = context; 
     this.searchPostsCallBack = searchPostsCallBack; 
     this.parentLayout = linearLayout; 

    } 

    public interface SearchPostsCallBack { 
     void doPostExecute(ArrayList<PostDelivery> list); 
    } 

    @Override 
    protected void onPreExecute() { 
     super.onPreExecute(); 

     loadingDialog = new ProgressDialog(mContext); 

     if (!isOnline()) { 

      snackbar = Snackbar.make(parentLayout, R.string.check_network, Snackbar.LENGTH_LONG); 
      snackbar.show(); 
     } else { 
      loadingDialog.show(mContext, null,mContext.getString(R.string.wait)); 
     } 

    } 

    @Override 
    protected JSONObject doInBackground(String... params) { 
     try { 
      api = mContext.getResources().getString(R.string.url) + "requestlist"; 

      jsonParams = new JSONObject(); 
      jsonParams.put("st_lati", params[0]); 
      jsonParams.put("st_longi", params[1]); 
      jsonParams.put("ed_lati", params[2]); 
      jsonParams.put("ed_longi", params[3]); 
      jsonParams.put("pt_date", params[4]); 


      ServerRequest request = new ServerRequest(api, jsonParams); 
      return request.sendPostRequest(params[5]); 

     } catch (JSONException je) { 
      Log.e("exception",je.toString()); 
      return Excpetion2JSON.getJSON(je); 
     } catch (Exception ue) { 
      return Excpetion2JSON.getJSON(ue); 
     } 
    } 

    @Override 
    protected void onPostExecute(JSONObject response) { 
     super.onPostExecute(response); 
     if (loadingDialog.isShowing()) 
      loadingDialog.dismiss(); 
     try { 
      list = new ArrayList<>(); 


        String result = response.getString("result"); 
        String message = response.getString("message"); 
        if (result.equals("1")) { 


         listsArray = response.getJSONArray("cost"); 

         for (int j = 0; j < listsArray.length(); j++) { 

          jsonObject = listsArray.getJSONObject(j); 


        PostDelivery postDelivery = new PostDelivery(); 

        postDelivery.setmPt_id(jsonObject.getString("pt_id")); 
        postDelivery.setmPt_name(jsonObject.getString("pt_name")); 
        postDelivery.setmPtDetail(jsonObject.getString("pt_detail")); 
        postDelivery.setmPtStartLoc(jsonObject.getString("pt_start_loc")); 
        postDelivery.setmPtEndLoc(jsonObject.getString("pt_end_loc")); 
        postDelivery.setmPtDate(jsonObject.getString("pt_date")); 


        list.add(postDelivery); 

        searchPostsCallBack.doPostExecute(list); 

       } 
      } 

       snackbar = Snackbar.make(parentLayout, "sorry", Snackbar.LENGTH_LONG); 

       snackbar.show(); 


    }catch (JSONException je) { 
      je.printStackTrace(); 
      // Toast.makeText(getApplicationContext(), je.getMessage(), Toast.LENGTH_LONG).show(); 
     } 
    } 

} 

異常和響應:

D/ServerResponse: {"result":1,"message":"Success","cost":[{"pt_id":"5","ur_id":"2","pt_name":"mobile","pt_detail":"samsung mobile ","pt_size":"0","pt_weight":"150","pt_start_loc":"nashik"}]} 
06-04 19:26:06.284 7129-7129/com.carryapp W/System.err: org.json.JSONException: No value for result 

這是怎麼回事錯在這裏?請幫助。謝謝..

+0

結果是整數。見,沒有雙引號!! – Pzy64

回答

0

在您的ServerResponse {"result":1}中,「結果」是int,而您使用的是String result = response.getString("result"),則應該使用getInt

+0

我已經嘗試過int首先,我也得到了同樣的異常。 – Sid

0

{"result":1, 「消息」: 「成功」, 「成本」:[{ 「pt_id」: 「5」, 「ur_id」: 「2」, 「pt_name」: 「移動」, 「pt_detail」 : 「三星 移動」, 「pt_size」: 「0」, 「pt_weight」: 「150」, 「pt_start_loc」: 「納西克」}]}

表格附response,似乎的值resultint值和您嘗試使用得到這個值:

String result = response.getString("result"); // WRONG 

嘗試使用:

int result = response.getInt("result"); 
+0

我已經嘗試過int首先,我也得到了同樣的異常。 – Sid

+0

將'onPostExecute'中的某些日誌記錄在從它獲取值之前檢查響應。 – FAT