Php 无法将结果转换为JSON数组
我试图在我的android应用程序中从MYSQL数据库返回数据,但当我运行应用程序时,返回的结果无法转换为JSON数组“发生异常,表示JSONException:java.lang.String类型的值无法转换为JSONArray” 我确保php脚本以JSON格式返回数据,并且在解析之前的结果不为null,它保存返回的数据。为什么会发生此异常,以及我如何解决它?请帮帮我 这是我的代码: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
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);
从实体获取字符串
看起来可疑的是,“解析”和大括号之间有这么长的间隔:“[”,看起来里面有一些控制字符。下面是一些提示:
$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);