2012-05-06 54 views
0

我使用下面的代碼(從mysql中檢索數據)並且它在Android模擬器版本4 中運行時沒有問題,但是當我使用在2.1版本的結果相同的代碼出現在logcat的parssingorg.json.JSONException:無法將類型java.lang.String的值轉換爲JSONArray

,這是錯誤:

parssing error org.json.JSONException: A JSONArray text must start with '[' at character 1 of <br /> 

和此使用2.2 parssingorg.json.JSONException時是誤差:類型的java.lang中的價值。字符串不能轉換爲JSONArray

 protected Void doInBackground(Void... params) { 
    MealActivity.foodList = new ArrayList<ItemInList>();  

    try 
    { 
     ArrayList<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(); 
     nameValuePairs.add(new BasicNameValuePair",k)); 
     HttpClient httpclient = new DefaultHttpClient(); 
     HttpPost httppost = new HttpPost("http://10.0.2.2/y.php"); 
     httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs,"UTF-8")); 
     HttpResponse response = httpclient.execute(httppost); 
     HttpEntity entity = response.getEntity(); 
     is = entity.getContent(); 
     } 
    catch(Exception e) 
     { 
     Log.e("log_tag", "Error in http connection "+e.toString()); 
     } 
     //convert response to string 
     try{ 
     BufferedReader reader = new BufferedReader(new InputStreamReader(is,"utf-8"),8); 
     StringBuilder sb = new StringBuilder(); 
     String line = null; 
     while ((line = reader.readLine()) != null) { 
     sb.append(line + "\n"); 
     } 
     is.close(); 
     result=sb.toString(); 

      } 
     catch(Exception e) 
     { 
     Log.e("log_tag", "Error converting result "+e.toString()); 
     } 

     //parsing reesult 

     try{ 
     Log.e("log_tag", " result before parsing " + result); 

     String foodName=""; 
     int Description=0; 

     jArray = new JSONArray(result); 
     JSONObject json_data = null; 

     for (int i = 0; i < jArray.length(); i++) { 
     json_data = jArray.getJSONObject(i); 
     if(json_data!=null) 
      { 
      foodName=json_data.getString("Food"); 
      Description=json_data.getInt("Calories");    
      item.setName(foodName); 
      item.setDescription(Description); 
      item.setSelected(false); 
      MealActivity.foodList.add(item); 
      item=new ItemInList(); 


          } 
         } 
+0

的JSON部這給異常粘貼。我猜這是json的錯誤。 – Warpzit

+0

你得到的只是一個普通的jsonobject而不是一個json數組...... – Warpzit

+0

好吧,他們可能更新了json的實現......嘗試使用GSON並查看它是否只適用於1,或者不適用於這兩者。 – Warpzit

回答

0

以下代碼和輸入字符串在2.2上適用於我。不過我不得不清理你的輸入字符串,因爲它有一些控制(不可見)的字符。你可能想檢查一下。

String data = "[{\"Food\":\"\\u062a\\u0641\\u0627\\u062d \\u0628\\u062f\\u0648\\u0646 \\u0627\\u0644\\u0642\\u0634\\u0631\\u0629\",\"Protein\":\"0.27\",\"Water\":\"86.67\",\"Magnesium\":\"4\",\"Phosphorus\":\"11\",\"Sodium\":\"0\",\"Zinc\":\"0.05\",\"Vit_C\":\"4\",\"Fat_Sat\":\"0\",\"Fat_Mono\":\"0\",\"Vit_B12\":\"0\",\"Calcium\":\"5\",\"Calories\":\"48\",\"Fiber\":\"1\",\"Cholesterole\":\"0\",\"Potassium\":\"90\",\"Sugar_Tot\":\"10.1\",\"Iron\":\"0.07\",\"Folic_Acid\":\"0\",\"carbohydrates\":\"13\",\"Vit_K\":\"0.6\"}]"; 
    try { 
     JSONArray ja = new JSONArray(data); 
     Log.d("Sample", "Length:" + ja.length()); 
     Log.d("Sample", "Data:" + ja.get(0)); 
    } catch (Exception e) { 
     Log.e("Sample", "Error", e); 
    } 

輸出爲:

Length:1 
Data:{"Calories":"48","Calcium":"5","Vit_K":"0.6","Food":"تفاح بدون القشرة","Phosphorus":"11","Potassium":"90","Fat_Mono":"0","Folic_Acid":"0","Cholesterole":"0","Vit_C":"4","Water":"86.67","Vit_B12":"0","Sugar_Tot":"10.1","Sodium":"0","Fat_Sat":"0","Zinc":"0.05","carbohydrates":"13","Magnesium":"4","Iron":"0.07","Fiber":"1","Protein":"0.27"} 
+0

我使用了2.2,並且出現此錯誤parssingorg.json.JSONException:無法將類型java.lang.String的值轉換爲JSONArray。 – user2012

+0

如何清理字符串befor將其轉換爲數組 – user2012

+0

我會說讓源服務器知道它的發送控制字符,並告訴他們修復它,或者如果控制字符有限,請使用一些正則表達式/簡單字符串替換。 – kontinuity

相關問題