我目前正在为1.6开发一个Android应用程序来解析从服务器收到的json文件,然后在列表视图中显示结果。到目前为止,除了拥有在Android 2.2上运行的HTC G2的人之外,我所有的beta测试者都没有任何问题。他说他的列表视图中没有看到任何内容,让我觉得json检索或解析存在一些问题。他还说他在运行应用程序时没有任何互联网问题。即使我的“刷新”选项也无法解决他的问题。我想知道G2是否会引起这种情况有什么特别的不同。这是我处理JSON的代码。
首先,我使用OAuth客户端获取文件
OAuthMessage request = accessor.newRequestMessage(method, url, parameters);
response = client.invoke(request, OAuthClient.ParameterStyle.BODY);
if (("application/json; charset=utf-8").equals(response.getBodyType())) {
return response.readBodyAsString();
如果json抓取存在问题
,我也会显示祝酒词 if (result instanceof Exception) {
// If failed during refreshing vouchers, show message to user
if (USER_REFRESH.equals(flag) || SYSTEM_REFRESH.equals(flag)) {
((ListVouchers)context).getProgressDialog().cancel();
Toast.makeText(context, "Could not load. Try again later.", Toast.LENGTH_LONG).show();
}
然后我将来自JSON的信息存储到数据库中:
JSONArray jArray = new JSONArray(params[0]);
int jarrayLength = jArray.length();
//Create a set of the ids in the json
for (int i = 0; i < jarrayLength; i++) {
JSONObject jsonObj = jArray.getJSONObject(i);
JSONObject categoryObj = jsonObj.getJSONObject("category");
values.put("categoryName", categoryObj.getString("name"));
values.put("categoryId", categoryObj.getString("id")); }
contentResolver.insert(CONTENT_URI, values);
有没有人知道为什么G2特别不会这样做?用户报告没有崩溃,只是他看到我的空视图应该是来自json的信息。我认为唯一的问题是缺少空间,但我不认为用户的手机不能存储几kb的json文本。我已经完成了他的帐户的管理员登录,它在我用于测试的手机上工作正常。
编辑:
我已经向用户询问了一个logcat,似乎问题源于此错误:
org.json.JSONException: Value other of type java.lang.String cannot be converted to JSONArray
发生在这一行,其中params [0]是服务器的结果:
JSONArray jArray = new JSONArray(params[0]);
这可能与处理文本文件的某些手机有什么不同吗?似乎结果未被检测为json文件
答案 0 :(得分:0)
尝试替换它:
JSONArray jArray = new JSONArray(params[0]);
用这个:
JSONObject jsonData = new JSONObject(params[0]);
JSONArray nameArray = jsonData.names();
JSONArray jArray = json.toJSONArray(nameArray);
答案 1 :(得分:0)
我发现了问题。事实证明,人的G2上的httpclient在application / json中提供了一个没有空格的内容类型;字符集= UTF-8。我通过检查“application / json”而不是'application / json;修复了这个问题。字符集= UTF-8' 。