parssingorg.json.JSONException:类型java.lang.String的值无法转换为JSONArray

时间:2012-05-06 11:48:02

标签: android json

我使用下面的代码(从mysql中检索数据),它在android模拟器版本4中运行没有问题 ,但是当我在2.1版中使用相同的代码时,结果出现在logcat

这是错误:

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

这是使用2.2时的错误     parssingorg.json.JSONException:java.lang.String类型的值无法转换为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();


                            }
                         }

2 个答案:

答案 0 :(得分:0)

我现在很确定。您的问题是您正在尝试将jsonobject转换为json数组。这个问题类似:"A JSONArray text must start with '[' at character 1 of null"。 你应该做的只是改用jsonobject。

答案 1 :(得分: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"}