java - android中Asynctask内的json解析错误

标签 java android json android-asynctask rest-client

我在我的应用程序中“有时”收到此错误,我使用 Asyntask:

03-19 08:10:05.768: E/AndroidRuntime(280): FATAL EXCEPTION: main
03-19 08:10:05.768: E/AndroidRuntime(280): java.lang.NumberFormatException: unable to   parse 'null' as integer
 03-19 08:10:05.768: E/AndroidRuntime(280):     at   java.lang.Integer.parseInt(Integer.java:406)
 03-19 08:10:05.768: E/AndroidRuntime(280):     at java.lang.Integer.parseInt(Integer.java:382)
 03-19 08:10:05.768: E/AndroidRuntime(280):     at java.lang.Integer.valueOf(Integer.java:682)
 03-19 08:10:05.768: E/AndroidRuntime(280):     at Dic.proj.pkg.notifService$1$1$1$1.onPostExecute(notifService.java:76)
 03-19 08:10:05.768: E/AndroidRuntime(280):     at Dic.proj.pkg.notifService$1$1$1$1.onPostExecute(notifService.java:1)
 03-19 08:10:05.768: E/AndroidRuntime(280):     at android.os.AsyncTask.finish(AsyncTask.java:417)
03-19 08:10:05.768: E/AndroidRuntime(280):  at android.os.AsyncTask.access$300(AsyncTask.java:127)
03-19 08:10:05.768: E/AndroidRuntime(280):  at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:429)
03-19 08:10:05.768: E/AndroidRuntime(280):  at android.os.Handler.dispatchMessage(Handler.java:99)
 03-19 08:10:05.768: E/AndroidRuntime(280):     at android.os.Looper.loop(Looper.java:123)
 03-19 08:10:05.768: E/AndroidRuntime(280):     at android.app.ActivityThread.main(ActivityThread.java:4627)
 03-19 08:10:05.768: E/AndroidRuntime(280):     at java.lang.reflect.Method.invokeNative(Native Method)
 03-19 08:10:05.768: E/AndroidRuntime(280):     at java.lang.reflect.Method.invoke(Method.java:521)
  03-19 08:10:05.768: E/AndroidRuntime(280):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
  03-19 08:10:05.768: E/AndroidRuntime(280):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
  03-19 08:10:05.768: E/AndroidRuntime(280):    at dalvik.system.NativeStart.main(Native Method)

我在计时器内调用我的 Asyntask。这是我的 Asyntask:

    // fetch new notifications
class fetch_last_asyn extends AsyncTask<Void, Integer, Boolean> {
    @Override
    protected Boolean doInBackground(Void... arg0) {
        RestClient client = new RestClient(
                "http://myaddress.org/api/get_last.php");
        client.AddParam("last", String.valueOf(last_notif_no));
        try {
            client.Execute(RequestMethod.GET);
        } catch (Exception e) {
            e.printStackTrace();
        }
        String response = client.getResponse();
        last_notifs = response.toString();
        return true;
    }
}

在我的应用程序中,我发送 Asyntask 结果以解析为代码(parse_get_update),就是这样:

    public static String[][] parse_get_update(String jsonResponse) {
    String[][] notifs = new String[3000][10];
    try {
        JSONArray jsonArray = new JSONArray(jsonResponse);
        for (int index = 0; index < jsonArray.length(); index++) {
            JSONObject json = jsonArray.getJSONObject(index);

            // get name & id here
            String id = json.getString("id");
            String notifno = json.getString("notifno");
            String title = json.getString("title");
            String description = json.getString("description");

            notifs[index][0] = id;
            notifs[index][1] = notifno;
            notifs[index][2] = title;
            notifs[index][3] = description;

            // notif_count++;
        }
        cnt2 = jsonArray.length();
    } catch (JSONException e) {
        e.printStackTrace();
    }

    return notifs;
}

为什么我会收到此错误?什么是NULL?我无法理解这一点。

我使用 ResClient 来解析 JSON。此错误仅有时发生,大约 10% 的次数...

感谢您的回答

最佳答案

在您的 postExecute() 方法中,您正在使用此 - Integer.parseInt 将 String 解析为 Integer (str);

大多数情况下,str 是一个有效的数字,因此它可以工作。但在 10% 的情况下,str 可能会丢失或作为 JSON 中的 emtpy 字符串出现,并且因此,null 被传递给 Integer.parseInt(null),这会导致 java.lang.NumberFormatException

识别该代码段,并在将其解析为Integer之前对其进行null检查。

关于java - android中Asynctask内的json解析错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15495533/

相关文章:

java - 使用 Beam Java SDK 在 Google Dataflow 上安装 apt-get 依赖项

android - Android 上的 Grenular 权限。为什么不?

javascript - 我无法处理对 jsonp 请求的响应

java - 在 Java 中访问 Treeset 中的下一个元素

java - Java 中的 char** 等价物

android - 异常设置 Android 2.3.4 上的 Imagebutton View

android - 带有自定义列表的进度条

java - 如果您决定重命名类中的字段,如何读取旧的 json 字符串(使用 gson)

java - 在结果 Json 响应中显示类名而不是对象

java - 是否可能 - 来自数组值的边框布局位置?