0

以下のコードを使用して( 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();


                            }
                         }
4

2 に答える 2

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"}
于 2012-05-06T14:10:12.597 に答える
0

さて、私は今かなり確信しています。問題は、jsonobject を json 配列にキャストしようとしていることです。この質問は似ています: "A JSONArray text must start with '[' at character 1 of null" . 代わりに jsonobject を使用するだけです。

于 2012-05-06T13:27:37.103 に答える