1

AndroidアプリでMYSQLデータベースからデータを返そうとしていますが、アプリケーションを実行すると、返された結果をJSON配列に変換できません。「JSONException:タイプjava.lang.Stringの値をJSONArrayに変換できないという例外が発生しました。 「」

phpスクリプトがデータをJSON形式で返すことを確認し、解析する前の結果がnullではなく、返されたデータを保持します。この例外が発生するのはなぜですか?また、どのように解決できますか?私を助けてください

これは私のコードです:

       private class LoadData extends AsyncTask<Void, Void, String> { 

 private String result = "";
 private InputStream is = null;

 private ProgressDialog progressDialog;



protected void onPreExecute() 
{
       this.progressDialog = ProgressDialog.show(AddFood.this, "","Loading......");  
}

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

   try
   {
          ArrayList<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();
         nameValuePairs.add(new BasicNameValuePair("Name",entered_food_Name));
         HttpClient httpclient = new DefaultHttpClient();
        HttpPost httppost = new HttpPost("http://10.0.2.2/food.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());
        }
   Log.e("log_tag",result+ "result");
    return result;
    }


@Override
protected void onPostExecute(String  result) 
                   {
                              this.progressDialog.dismiss();

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

         String foodName="";
         int Description=0;

         JSONArray jArray = new JSONArray(result);
            JSONObject json_data=null;
            for(int i=0;i<jArray.length();i++)
            {
                json_data = jArray.getJSONObject(i);

             foodName=json_data.getString("Name");
             Description=json_data.getInt("Calories");              
             item.setName(foodName);
             item.setDescription(Description);
             item.setSelected(false);
             MealActivity.foodList.add(item);   
                                                             }

                                                                 }
            catch(JSONException e){
                Log.e("log_tag", "parssing error " + e.toString());
            }   

    }}

これはphpスクリプトです:

<?php

 $con1=mysql_connect("localhost" , "user","pass" ) ;

 mysql_select_db("MYDB");
 mysql_query("SET NAMES utf8"); 

 $sql=mysql_query("select  Name,Calories  from food where Name LIKE      '%".$_REQUEST['Name']."%' ");

while($row=mysql_fetch_assoc($sql))
$output[]=$row;
$data =json_encode($output);
print($data);
mysql_close();

  ?>

返されたデータ

  E/log_tag(491):  result before parsing             [{"Name":"\u0627\u0641\u0648\u0643\u0627\u062f\u0648","Calories":"160"}]
4

2 に答える 2

1
$sql=mysql_query("select  Name as name,Calories as cal  from food where Name LIKE      '%".$_REQUEST['Name']."%' ");

わずかな変更で、問題は解決されます。

while($row=mysql_fetch_assoc($sql))

$name=$row['name'];

$cal=$row['cal'];

$data1 =json_encode($name);

$data2=json_encode($cal);

print($data1);
print($data2);
于 2012-05-08T07:10:34.720 に答える