我的TabActivity中有异步任务,虽然我以前一直在使用它,但它突然停止了。我必须改变一些事情。我在活动的构造函数中调用new CallWebServiceAd().execute();
。
我可以注释掉异步任务中的所有代码,但只是调用asynctask才会崩溃应用程序。
我明白了:
01-26 16:27:04.196: E/AndroidRuntime(818): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.tca.app/com.tca.app.AndroidTabLayoutActivity}: java.lang.NullPointerException
01-26 16:27:04.196: E/AndroidRuntime(818): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1955)
01-26 16:27:04.196: E/AndroidRuntime(818): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1980)
01-26 16:27:04.196: E/AndroidRuntime(818): at android.app.ActivityThread.access$600(ActivityThread.java:122)
01-26 16:27:04.196: E/AndroidRuntime(818): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1146)
01-26 16:27:04.196: E/AndroidRuntime(818): at android.os.Handler.dispatchMessage(Handler.java:99)
01-26 16:27:04.196: E/AndroidRuntime(818): at android.os.Looper.loop(Looper.java:137)
01-26 16:27:04.196: E/AndroidRuntime(818): at android.app.ActivityThread.main(ActivityThread.java:4340)
01-26 16:27:04.196: E/AndroidRuntime(818): at java.lang.reflect.Method.invokeNative(Native Method)
01-26 16:27:04.196: E/AndroidRuntime(818): at java.lang.reflect.Method.invoke(Method.java:511)
01-26 16:27:04.196: E/AndroidRuntime(818): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
01-26 16:27:04.196: E/AndroidRuntime(818): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
01-26 16:27:04.196: E/AndroidRuntime(818): at dalvik.system.NativeStart.main(Native Method)
01-26 16:27:04.196: E/AndroidRuntime(818): Caused by: java.lang.NullPointerException
01-26 16:27:04.196: E/AndroidRuntime(818): at com.tca.app.AndroidTabLayoutActivity.onCreate(AndroidTabLayoutActivity.java:51)
01-26 16:27:04.196: E/AndroidRuntime(818): at android.app.Activity.performCreate(Activity.java:4465)
01-26 16:27:04.196: E/AndroidRuntime(818): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1049)
01-26 16:27:04.196: E/AndroidRuntime(818): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1919)
01-26 16:27:04.196: E/AndroidRuntime(818): ... 11 more
这是异步任务部分:
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
this.setTabs();
new CallWebServiceAd().execute();
System.out.println("Height"+tabHost.getHeight());
}
public String getAd(){
RestClient client = new RestClient("http://example.com");
try {
client.Execute(RequestMethod.GET);
} catch (Exception e) {
e.printStackTrace();
}
String theResponse = client.getResponse();
return theResponse;
}
public void parseJSONResponse(String jsonResponse) {
//using gson, place all the json into the SingleEvent object and then into a List
Type listType = new TypeToken<List<AdEvent>>(){}.getType();
List<AdEvent> ad = new Gson().fromJson(jsonResponse, listType);
this.displayAd(ad);
}
private class CallWebServiceAd extends AsyncTask<String,String,String>{
@Override
protected String doInBackground(String... arg0) {
// TODO Auto-generated method stub
return getAd();
}
@Override
protected void onPostExecute(String result) {
parseJSONResponse(result);
}
}
我添加了onCreate。但就像我说的那样,它是新的CallWebServiceAd()。execute();我不知道为什么它以前在工作。
答案 0 :(得分:-1)
首先,请检查您的应用是否真的落入此应用中。今天我浪费了一个小时才发现原因真的出现在其他活动中。
其次,如果它在此应用程序中,则在onCreate,onStart和onResume中放置断点。如果你没有最后两个,那就去做吧。所以,当它下降时,你会确切地知道。
第三,如果你从另一个活动进入这个活动,将第二个活动中的相同断点放入onStop,onDestroy和onPause。
很可能,你会看到解决方案。如果没有,请回来,在问题中加入更多信息,让我们思考。