好的,我知道以前有人问过这个问题,但是所有的答案都没有帮助。首先,让我回顾一下问题:
我有一个(PHP 生成的)JSON 元素,PHP 代码如下所示:
if (!headers_sent()) header('Content-type: application/json');
echo "[{\"test\":\"success\"}]";
在此之前没有其他回声,打印或其他任何东西,所以输出真的只是
[{"test":"success"}]
没有别的了。PHP 文件保存为纯 UTF-8(经过检查和双重检查)。
现在,我的 Android 代码如下所示:
StringBuilder builder = new StringBuilder();
HttpClient client = new DefaultHttpClient();
HttpGet httpGet = new HttpGet("http://myurl");
try {
HttpResponse response = client.execute(httpGet);
StatusLine statusLine = response.getStatusLine();
int statusCode = statusLine.getStatusCode();
if (statusCode == 200) {
HttpEntity entity = response.getEntity();
InputStream content = entity.getContent();
BufferedReader reader = new BufferedReader(new InputStreamReader(content, "UTF-8"), 8);
String line;
while ((line = reader.readLine()) != null) {
builder.append(line);
}
}
} catch (ClientProtocolException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
String menuData = builder.getString();
ArrayList<HashMap<String, String>> tempList = new ArrayList<HashMap<String, String>>();
boolean change = false;
try {
JSONArray jsonMenu = new JSONArray(menuData);
for (int i = 0; i < jsonMenu.length(); i++) {
JSONObject jsonObject;
try {
jsonObject = jsonMenu.getJSONObject(i);
HashMap<String, String> menuItem = new HashMap<String, String>();
menuItem.put("test", jsonObject.getString("test"));
tempList.add(menuItem);
change = true;
} catch (JSONException e) {
}
}
} catch (JSONException e) {
}
if(change) {
// here comes the listview update, but never triggered anyways
}
而且我总是收到相同的错误消息:
04-05 21:06:31.226: W/System.err(1208): org.json.JSONException: A JSONArray text must start with '[' at character 1 of ?[{"test":"success"}]
这其实是Logcat输出保存到log.txt并在这里解析,然后一下子就出现了这个问号。在将字符串解析为 JSONArray 之前对字符串进行修剪或格式化的所有尝试都失败了。我完全不知道还能做什么。顺便说一下,在 Eclipse 本身的 Logcat 中没有问号......
在 catch 语句中添加 Log.e 输出,错误输出完全相同。截图在这里: