Php 无法将java.lang.String类型的值转换为JSONObject
我尝试构建一个android应用程序,将一个参数发送到php代码作为一个where 在php代码中的查询条件,我应该在日志中获取 我得到以下错误 org.json.JSONException:无法将java.lang.String类型的值转换为JSONObject 主要活动Php 无法将java.lang.String类型的值转换为JSONObject,php,android,json,android-json,Php,Android,Json,Android Json,我尝试构建一个android应用程序,将一个参数发送到php代码作为一个where 在php代码中的查询条件,我应该在日志中获取 我得到以下错误 org.json.JSONException:无法将java.lang.String类型的值转换为JSONObject 主要活动 public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceSta
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
try {
JSONObject toSend = new JSONObject();
toSend.put("msg", "3");
JSONTransmitter transmitter = new JSONTransmitter();
transmitter.execute(new JSONObject[] {toSend});
} catch (JSONException e) {
e.printStackTrace();
}
}
}
JSONTransmitter类
public class JSONTransmitter extends AsyncTask<JSONObject, JSONObject, JSONObject> {
String url = "http://192.168.1.10:89/b.php";
protected JSONObject doInBackground(JSONObject... data) {
JSONObject json = data[0];
HttpClient client = new DefaultHttpClient();
HttpConnectionParams.setConnectionTimeout(client.getParams(), 100000);
StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder().permitNetwork().build());
JSONObject jsonResponse = null;
HttpPost post = new HttpPost(url);
try {
StringEntity se = new StringEntity("json="+json.toString());
post.addHeader("content-type", "application/x-www-form-urlencoded");
post.setEntity(se);
HttpResponse response;
response = client.execute(post);
String resFromServer = org.apache.http.util.EntityUtils.toString(response.getEntity());
jsonResponse=new JSONObject(resFromServer);
Log.i("Response from server", jsonResponse.getString("msg"));
Toast.makeText(null, resFromServer, Toast.LENGTH_LONG);
} catch (Exception e) { e.printStackTrace();}
return jsonResponse;
}
}
public类JSONTransmitter扩展异步任务{
字符串url=”http://192.168.1.10:89/b.php";
受保护的JSONObject doInBackground(JSONObject…数据){
JSONObject json=data[0];
HttpClient=new DefaultHttpClient();
HttpConnectionParams.setConnectionTimeout(client.getParams(),100000);
StrictMode.setThreadPolicy(新的StrictMode.ThreadPolicy.Builder().permitNetwork().build());
JSONObject jsonResponse=null;
HttpPost=新的HttpPost(url);
试一试{
StringEntity se=new StringEntity(“json=“+json.toString());
post.addHeader(“内容类型”、“应用程序/x-www-form-urlencoded”);
邮政实体(se);
HttpResponse响应;
响应=client.execute(post);
字符串resFromServer=org.apache.http.util.EntityUtils.toString(response.getEntity());
jsonResponse=新的JSONObject(resFromServer);
Log.i(“来自服务器的响应”,jsonResponse.getString(“msg”);
Toast.makeText(null,resFromServer,Toast.LENGTH\u LONG);
}catch(异常e){e.printStackTrace();}
返回jsonResponse;
}
}
php代码
<?php
mysql_connect("localhost", "root", "password")
or die(mysql_error());
mysql_select_db("test") or die(mysql_error());
$result = mysql_query(" select part_name from Services_parts where part_id= 1 ")
or die(mysql_error());
$row = mysql_fetch_array( $result );
$j_out = new stdClass();
$j_out->part_name= $row['part_name'];
echo json_encode($j_out);
?>
您执行的代码相当于:
JSONObject obj = new JSONObject("john");
什么会导致异常
这意味着来自服务器的json数据格式错误。问题可能出在php代码中,因为在php+java代码下面返回json adapt中的项目数组:
$res_items = array();
for ( ... ) {
array_push($res_items, $some_item);
}
$js_result = get_json_encode(array(
"results" => $res_items
));
echo $js_result;
JSONObject jsResp = new JSONObject(serverJsonResult);
JSONArray results = jsResp.getJSONArray("results");
for (int n = 0; n < results.length(); ++n) {
JSONObject js_row = results.getJSONObject(n);
// ...
}
然后在java代码中:
$res_items = array();
for ( ... ) {
array_push($res_items, $some_item);
}
$js_result = get_json_encode(array(
"results" => $res_items
));
echo $js_result;
JSONObject jsResp = new JSONObject(serverJsonResult);
JSONArray results = jsResp.getJSONArray("results");
for (int n = 0; n < results.length(); ++n) {
JSONObject js_row = results.getJSONObject(n);
// ...
}
JSONObject jsResp=新的JSONObject(serverJsonResult);
JSONArray results=jsResp.getJSONArray(“结果”);
对于(int n=0;n
java代码中为什么可能重复将JSONObject转换为JSONArray,然后获取该数组的元素该数组的元素是什么?这只是一个元素john,请完成您的代码以进行尝试them@JEREEF我不明白您的意思,您的服务器必须返回有效的json数据,引发此异常是因为它没有返回。带有“john”的json的最简单形式类似于{name:“john”}