G2和json解析

时间:2011-06-30 15:22:26

标签: android

我目前正在为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文件

2 个答案:

答案 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' 。