2014-05-02 54 views
0

以下是我從webservice得到的json響應。 {"message":"success","data":[{"push_status":"1"}]} 我想獲得推送狀態的值。如何從json webservices獲取值

這是我的代碼:

 public static VehicleDetails getPushNotificationstatus(String clientCode,String secretode) throws ClientProtocolException, 
      IOException, JSONException { 
       Log.d(WebServiceHelper.TAG, "getPushNotificationstatus==============>"); 
     VehicleDetails vdetails = null; 
     String result; 
     ArrayList<VehicleDetails> SIArrayList = new ArrayList<VehicleDetails>(); 
     JSONObject jObject = null; 
     try { 
      Log.d(WebServiceHelper.TAG, "WebserviceHelperOnLogin>>>>>>>>>>>"); 
      vdetails = new VehicleDetails(); 
      METHOD_NAME = "getPushNotifyStatus"; 
      Log.d(WebServiceHelper.TAG, "URL>>>>>>>>"+URL + METHOD_NAME); 
      HttpPost request = new HttpPost(URL + METHOD_NAME); 
      List<NameValuePair> postParameters = new ArrayList<NameValuePair>(); 
      postParameters.add(new BasicNameValuePair("clientCode", clientCode)); 
      postParameters.add(new BasicNameValuePair("secretCode", secretode)); 



      UrlEncodedFormEntity entity = new UrlEncodedFormEntity(
        postParameters); 
      request.setEntity(entity); 
      HttpResponse response = getThreadSafeClient().execute(request); 
      entityResponse = response.getEntity(); 
      result = EntityUtils.toString(entityResponse, HTTP.UTF_8); 
      // Log.i("FB", "result ::: " + result); 
      Log.d(TAG, "ResultPushStatus>>>>"+result); 
      jObject = new JSONObject(result); 

      vdetails.status_login = jObject.getString("message"); 
      // Log.i("FB", "contact.status_login ::: " + contact.status_login); 

      if (vdetails.status_login.contentEquals("success")) { 
       jObject = new JSONObject(jObject.getString("data")); 
       vdetails.pushStatus = jObject.getString("push_status"); 
       Log.d(TAG,"Push Status==================>"+vdetails.pushStatus); 
      } else if(vdetails.status_login.contentEquals("failed")){ 
       String Reason = jObject.getString("data").toString(); 
       Log.d(WebServiceHelper.TAG, "Fail Reason>>>>>"+Reason); 
       vdetails.failReason = Reason; 
      } 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 

     return vdetails; 

     } 

public static VehicleDetails[] getAllVehicles(String clientCode,String 

SECRETCODE)拋出ClientProtocolException,IOException異常,JSONException {VehicleDetails [] VD = NULL; String result = null;

VehicleDetails vdetails = null; ArrayList vehicleArrayList = new ArrayList(); JSONObject jObject = null; String loginUrl =「getAllVehicles」;

嘗試{

HttpPost請求=新HttpPost(URL + loginUrl);列表postParameters = new ArrayList();

postParameters.add(新BasicNameValuePair( 「clientCode」,clientCode)); postParameters.add(new BasicNameValuePair(「secretCode」,secretCode));

UrlEncodedFormEntity實體=新UrlEncodedFormEntity(postParameters); request.setEntity(實體); HttpResponse response = getThreadSafeClient()。execute(request); entityResponse = response.getEntity();結果= EntityUtils.toString(entityResponse,HTTP.UTF_8); Log.d(TAG,「result >>」+ result); JSONObject對象=(JSONObject)新的JSONTokener(結果).nextValue(); VehicleDetails.status_login = object.getString(「message」);

如果(VehicleDetails.status_login contentEquals( 「成功」)){JSONArray陣列= object.getJSONArray( 「數據」); vehicleArrayList.clear(); for(int i = 0; i < array.length(); i ++){Log.d(TAG,「LiveTracking >>>>>>>>>>」);

JSONObject jObj = array.getJSONObject(i); String vehicleId = jObj.getString(「vehicle_id」)。toString(); String vehicleNumber = jObj.getString(「vehicle_number」)。toString();

vdetails = new VehicleDetails();

vdetails.vehicleId = vehicleId; vdetails.vehicleNo = vehicleNumber;

vehicleArrayList.add(vdetails);

} VD =新VehicleDetails [vehicleArrayList.size()];

對(INT X = 0; X < vehicleArrayList.size(); ++ X){

VD [X] =(VehicleDetails)vehicleArrayList.get(X); }} else if(VehicleDetails.status_login.contentEquals(「failed」)){

JSONArray array = object.getJSONArray(「data」); (i = 0; < array.length(); i ++){JSONObject jObj = array.getJSONObject(i);

vdetails.failReason = jObj.getString( 「數據」)的toString();

}

}

}趕上(例外五){即的printStackTrace(); }

return vd;

}

//米 但是日誌顯示

05-02 14:34:40.597: W/System.err(10261): org.json.JSONException: Value [{"push_status":"1"}] of type org.json.JSONArray cannot be converted to JSONObject 
    05-02 14:34:40.617: W/System.err(10261): at org.json.JSON.typeMismatch(JSON.java:107) 
    05-02 14:34:40.627: W/System.err(10261): at org.json.JSONObject.<init>(JSONObject.java:158) 
    05-02 14:34:40.627: W/System.err(10261): at org.json.JSONObject.<init>(JSONObject.java:171) 

請告訴我這樣做的原因是什麼?請幫我

回答

1

迴應不是JSON對象,這是一個JSON陣列與一個元素。

JSONArray a = new JSONArray("[{your JSON code}]"); 
JSONObject = a.getJSONObject(1); 
+0

我認爲它應該是JSONObject = a.getJSONObject(0); –

1

在以下行中,'data'返回JSON數組而不是字符串。 (因爲它包含在[]中)

jObject = new JSONObject(jObject.getString("data")); 

因此,您需要首先獲取jsonArray。

JSONArray jArray = jObject.getJSONArray("data"); 

然後從數組中獲得第一個對象。

JSONObject dataObject = jArray.getJSONObject(0); 

現在獲取字符串。

String pushStatus = dataObject.getString("push_status");