2012-06-17 130 views
1

我目前正在处理解析JSON字符串的异步任务。一旦字符串被解析并从doInBackground()的任务转移到postExecute()它给我这个错误:异步任务空错误

06-17 20:19:53.612: E/AndroidRuntime(591): FATAL EXCEPTION: main 
06-17 20:19:53.612: E/AndroidRuntime(591): java.lang.NumberFormatException: unable to parse 'null' as integer 
06-17 20:19:53.612: E/AndroidRuntime(591): at java.lang.Integer.parseInt(Integer.java:356) 
06-17 20:19:53.612: E/AndroidRuntime(591): at java.lang.Integer.parseInt(Integer.java:332) 
06-17 20:19:53.612: E/AndroidRuntime(591): at stefan.testservice.ParkingActivity$DownloadTask.onPostExecute(ParkingActivity.java:258) 
06-17 20:19:53.612: E/AndroidRuntime(591): at android.os.AsyncTask.finish(AsyncTask.java:417) 
06-17 20:19:53.612: E/AndroidRuntime(591): at android.os.AsyncTask.access$300(AsyncTask.java:127) 
06-17 20:19:53.612: E/AndroidRuntime(591): at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:429) 
06-17 20:19:53.612: E/AndroidRuntime(591): at android.os.Handler.dispatchMessage(Handler.java:99) 
06-17 20:19:53.612: E/AndroidRuntime(591): at android.os.Looper.loop(Looper.java:123) 
06-17 20:19:53.612: E/AndroidRuntime(591): at android.app.ActivityThread.main(ActivityThread.java:3683) 
06-17 20:19:53.612: E/AndroidRuntime(591): at java.lang.reflect.Method.invokeNative(Native Method) 
06-17 20:19:53.612: E/AndroidRuntime(591): at java.lang.reflect.Method.invoke(Method.java:507) 
06-17 20:19:53.612: E/AndroidRuntime(591): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839) 
06-17 20:19:53.612: E/AndroidRuntime(591): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597) 
06-17 20:19:53.612: E/AndroidRuntime(591): at dalvik.system.NativeStart.main(Native Method) 

很完美,之前的工作,只是突然这似乎有一些问题与在异步任务结束时返回'null'语句。我似乎无法找到解决方案。提前致谢。

我的代码片段:

private class DownloadTask extends AsyncTask<String, Void, Object> { 
    @Override 
    protected Object doInBackground(String... args) { 
     Log.i("MyApp", "Background thread starting"); 

      Global.url = "http://10.0.2.2:8000/CarServiceScheduling1/resources/json/product/getpark?degree="+degreeStatus+"&year="+yearStatus+"&distance="+distance+"&devid="+Global.android_id; 

      try{ 
       statusCode = cg.connection();  
      }catch (Exception e) { 
       test_connection = true; 
      } 


      if(test_connection == false){ 

       try { 
        output = cg.stringconverter(Global.data); 
        cg.parseGson(output); 
       } catch (IOException e) { 
        // TODO Auto-generated catch block 
        e.printStackTrace(); 
       } 

      } 
     } 
     return null; 
    } 



protected void onPostExecute(Object result) { 

       if (ParkingActivity.this.progressDialog != null) { 
        ParkingActivity.this.progressDialog.dismiss(); 

        if(CheckboxPreference == true && Integer.parseInt(Global.preference1) == 0 && Integer.parseInt(Global.preference2) == 0 && (Global.status.equalsIgnoreCase("No Slots available") || Global.status.equalsIgnoreCase("No"))){ 


         Intent searchSubActivity = new Intent(getBaseContext(), 
           Nospotsactivity.class); 
         startActivity(searchSubActivity); 
        } 
        else if (CheckboxPreference == true && (Integer.parseInt(Global.preference1) != 0 || Integer.parseInt(Global.preference2) != 0)){ 

         Intent searchSubActivity = new Intent(getBaseContext(), 
           Spotsfoundactivity.class); 
         startActivity(searchSubActivity); 
        } 
        else if(CheckboxPreference == false && (Integer.parseInt(Global.preference1) != 0 || Integer.parseInt(Global.preference2) != 0)){ 


         Intent searchSubActivity = new Intent(getBaseContext(), 
           Spotsfoundactivity.class); 
         startActivity(searchSubActivity); 
        } 
        if(Integer.parseInt(Global.preference1) == 0 && Integer.parseInt(Global.preference2) == 0){ 

         if(Global.status.equalsIgnoreCase("Hardly Likely")){ 


          Intent searchSubActivity = new Intent(getBaseContext(), 
            Unlikelyactivity.class); 
          startActivity(searchSubActivity); 
         } 


         else if(Global.status.equalsIgnoreCase("Likely")){ 


          Intent searchSubActivity = new Intent(getBaseContext(), 
            Likelyactivity.class); 
          startActivity(searchSubActivity); 

         } 
        } 
       } 
      } 
     } 
    } 
} 
+0

看到第一行'无法解析'空'为整数'所以首先检查字符串为空或不解析之前解析为整数 –

+0

请你好好阐述一下,因为我不明白你到底在说什么 – progdoc

+0

他说的是日志的相关部分是java.lang.NumberFormatException:无法将'null'解析为整数。你将一个null传递给某个东西。在传递之前检查null。 – keyser

回答

1

根据您的堆栈跟踪,无论是Global.preference1Global.preference2为空(或两者)。在将它们解析为整数之前,您可能需要执行空检查。