Php 无法将结果转换为JSON数组

Php 无法将结果转换为JSON数组,php,android,json,Php,Android,Json,我试图在我的android应用程序中从MYSQL数据库返回数据,但当我运行应用程序时,返回的结果无法转换为JSON数组“发生异常,表示JSONException:java.lang.String类型的值无法转换为JSONArray” 我确保php脚本以JSON格式返回数据,并且在解析之前的结果不为null,它保存返回的数据。为什么会发生此异常,以及我如何解决它?请帮帮我 这是我的代码: private class LoadData extends AsyncTask<Void

我试图在我的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

 $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();

  ?>

您可以使用以下方法使代码看起来更简单:

String jsonStr = EntityUtils.toString(entity, HTTP.UTF_8);
从实体获取字符串

看起来可疑的是,“解析”和大括号之间有这么长的间隔:“[”,看起来里面有一些控制字符。下面是一些提示:

  • 确保您正在使用ASCII编码编写php文件,可能您的HTML编辑器正在.php文件的开头添加BOM标记
  • 确保标记外没有字符
  • 要验证结果字符串中有哪些坏字符,请将它们作为字节输出到日志中,UTF-8 BOM如下所示:0xEF、0xBB、0xBF
  • 否则,json解析看起来很好

    $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);
    

    您可以发布从打印中打印的数据吗($data)调用?在看到这些数据之前,很难判断问题是什么。我发布了它,你现在可以看到了。请帮助我,我是android新手,我如何解决这个问题?谢谢,但这不是我们需要看到的;你能给我们PHP脚本的输出吗?例如,如果你从浏览器调用它,它会给出相同的结果
    while($row=mysql_fetch_assoc($sql))
    
    $name=$row['name'];
    
    $cal=$row['cal'];
    
    $data1 =json_encode($name);
    
    $data2=json_encode($cal);
    
    print($data1);
    print($data2);