0

アプリで「時々」このエラーが発生します。非同期タスクを使用します。

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 を呼び出します。これは私の非同期タスクです:

    // 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;
    }
}

私のアプリ内では、コード (parse_get_update) に解析するために Asyntask の結果を送信します。これは次のとおりです。

    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;
}

なぜこのエラーが発生するのですか? ヌルとは?私はこれを理解できません。

JSON の解析には ResClient を使用します。このエラーは、時々、約 10% の頻度で発生します...

回答ありがとうございます

4

3 に答える 3

1

これは、文字列を整数に解析しているために発生しています。この回答を参照してください。

于 2013-03-19T09:38:36.330 に答える
1

このエラーは、何も含まれていない文字列を解析しようとしていることを意味します。あなたが持っていることを示すために、以下のようにしています。

String s = "";   
int i = Integer.parseInt(s);

文字列が空の場合は解析されないように、以下のような条件が必要です。try catch ブロックも使用できます。

if(s is not null) {
  then do parse here
}
else {
  assign a default value
}
于 2013-03-19T09:27:47.557 に答える
1

postExecute()メソッドのどこかで、これを使用して a を解析していStringますInteger-Integer.parseInt(str);

ほとんどの場合、これstrは有効な数値であるため、機能します。しかし、これらの10%の時間は、strおそらく欠落しているか、emtpyから文字列として取得されているJSONため、 anullが に渡され、 java.lang.NumberFormatExceptionInteger.parseInt(null)が発生しています。

そのコードを特定しnull、解析する前にチェックを入れてくださいInteger

于 2013-03-19T09:27:57.910 に答える