Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/352.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java android中Asyntask内的json解析错误_Java_Android_Json_Android Asynctask_Rest Client - Fatal编程技术网

Java android中Asyntask内的json解析错误

Java android中Asyntask内的json解析错误,java,android,json,android-asynctask,rest-client,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

我在我的应用程序中“有时”出现此错误,我使用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)
    // 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。这是我的密码:

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)
    // 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;
    }
}
//获取新通知
类fetch\u last\u asyn扩展异步任务{
@凌驾
受保护的布尔doInBackground(无效…arg0){
RestClient=newrestclient(
"http://myaddress.org/api/get_last.php");
client.AddParam(“last”,String.valueOf(last_notif_no));
试一试{
client.Execute(RequestMethod.GET);
}捕获(例外e){
e、 printStackTrace();
}
字符串响应=client.getResponse();
last_notifs=response.toString();
返回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;
}
publicstaticstring[]parse\u get\u update(String jsonResponse){
字符串[][]notifs=新字符串[3000][10];
试一试{
JSONArray JSONArray=新的JSONArray(jsonResponse);
for(int index=0;index
为什么会出现这个错误?什么是空的?我不能理解这一点

我使用ResClient解析JSON。这种错误有时只会发生,大约10%的时候


感谢您的回答。

此错误表示您试图解析一个没有任何内容的字符串。为了证明你已经做了如下的事情

String s = "";   
int i = Integer.parseInt(s);
您需要有一个如下所示的条件,以便在字符串为空时它不会进行解析。您甚至可以使用try-catch块

if(s is not null) {
  then do parse here
}
else {
  assign a default value
}

该错误意味着您正试图解析一个没有任何内容的字符串。为了证明你已经做了如下的事情

String s = "";   
int i = Integer.parseInt(s);
您需要有一个如下所示的条件,以便在字符串为空时它不会进行解析。您甚至可以使用try-catch块

if(s is not null) {
  then do parse here
}
else {
  assign a default value
}
在您的
postExecute()
方法的某个地方,您正在使用这个-
Integer.parseInt(str)将
字符串解析为
Integer

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

postExecute()

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


识别这段代码,并在将其解析为
Integer
之前对其进行
null
检查这是由于将字符串解析为整数而发生的看到这一点。

这是由于将字符串解析为整数而发生的看到这一点。

在Dic.proj.pkg.notifService$1$1$1.onPostExecute(notifService.java:76)在PostExecute上给我们看。这意味着在第76行?是的。您正试图解析该行中为null的int。我猜您使用的是Integer.parseInt(这里的某个东西是null),我想可能是服务器端的问题?或者可能是响应为null?在Dic.proj.pkg.notifService$1$1$1.onPostExecute(notifService.java:76)上显示onPostExecute。这意味着在第76行?是的。您正试图解析该行中为null的int。我猜您使用的是Integer.parseInt(这里的某个东西是null),我想可能是服务器端的问题?或者可能是响应为null?我检查一下:myString.equals(“null”);而且很有效!!谢谢,我检查一下:myString.equals(“null”);而且很有效!!谢谢