我不确定我在PHP中使用的JSON代码是否正确将数据发送到我的Android应用程序。我的Android应用程序正常运行没有任何错误。我正在使用Async Task使用JSON从服务器检索信息。
这是我在Android应用中用来从服务器获取信息的代码:
JSONArray arr = new JSONArray(result);
JSONObject jObj = arr.getJSONObject(0);
myoutput = jObj.getString("stringpval");
我没有显示整个代码,但我确信所有其他代码都能正常工作。
以下是用于在PHP中创建JSON数组的PHP脚本:
$a = array(
array('stringpval' => "My Value"));
print $json = json_encode($a);
所以我已经完成了json的编码。我希望我在Android中的TextView显示“我的价值”!现在,当我运行我的Android应用程序并尝试从服务器获取信息时,我的TextView变为空白。这是空的!有什么问题?任何方案?上面的代码是否正确使用?
答案 0 :(得分:0)
原因是json_encode($ a);实际上是在返回一个JSONObject,而不仅仅是你正在思考的JSONArray。
您当前正在打印的内容如下所示:
{
{
'stringpval' = "My Value"
}
}
我不确定你为什么要使用双数组传回这样的单个值,所以现在我将你的PHP文件更改为:
$a = array('stringpval' => "My Value");
print $json = json_encode($a);
将返回:
{
'stringpval' = "My Value"
}
然后您可以通过以下方式访问Java:
JSONObject jObj = new JSONObject(result);
myoutput = jObj.getString("stringpval");
答案 1 :(得分:0)
json通常有两种形式,对象或数组,这非常重要,因为你必须知道从服务器(json数组或json对象?)检索哪些值,因此以正确的方式解析它们客户方。
JsonArray通常都是这样的
{
"jsonarray_example": [
{
"id": "1",
"name": "android",
"description": "android 4.4.3 kitkat",
"updated_at": "0000-00-00 00:00:00"
} ,
{
"id": "2",
"name": "android",
"description": "android 4.1 jellybin",
"updated_at": "0000-00-00 00:00:00"
}
]
}
开始和结束[]标记数组,而{}括号标记数组的对象,名为jsonarray_example,但括号不必像现在这样,如果你的php页面输出类似的东西,那么你可以检索数组,否则你必须检索android中的对象JsonObject
所以从你上面的问题,你试图检索jsonObjects,而你的响应是数组,你应该使用类似的东西
JsonArray result = new JsonArray() ;
JsonObject obj = //access the server files
result = obj.getJsonArray("stringpval") ;
// proceed extracting individual content from the response