我有一个使用bugsense的应用程序。我收到了assectask的onpostexecute方法中bugsense的崩溃引发的nullpointerexception崩溃的报告。奇怪的是,报告说在null.comXXXXX.XXXXX.projectname.InitRequest.onPostExecute(:1)上发生了nullpointer异常。不幸的是,我无法重现错误。
java.lang.NullPointerException
at com.XXXX.XXXX.InitRequest.onPostExecute(:1)
at android.os.AsyncTask.finish(AsyncTask.java:417)
at android.os.AsyncTask.access$300(AsyncTask.java:127)
at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:429)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:130)
at android.app.ActivityThread.main(ActivityThread.java:3687)
at java.lang.reflect.Method.invokeNative(Method.java)
at java.lang.reflect.Method.invoke(Method.java:507)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:867)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:625)
at dalvik.system.NativeStart.main(NativeStart.java)
这里是asynctask的代码
class InitRequest extends AsyncTask<Void, Void, Pair<HashMap<String,Object>,Exception>>{
private AuthToken authToken;
private int amount;
private InitCallback pic;
private Mode mode;
public boolean st = false;
public InitRequest(AuthToken authToken, int amount,InitCallback pic, Mode mode){
this.authToken = authToken;
this.amount = amount;
this.pic = pic;
this.mode = mode;
}
@Override
protected void onPreExecute(){
super.onPreExecute();
this.st = true;
}
@Override
protected Pair<HashMap<String,Object>,Exception> doInBackground(Void... params){
try{
Pair<Exception,String> inputStreamOrException = null;
if (this.mode.equals(DEVELOP)){
inputStreamOrException = Utilities.getCorrectInputStream(
Utilities.buildURL(XXXX));
}else {
inputStreamOrException = Utilities.getCorrectInputStream(
Utilities.buildURL("zzzzz));
}
if (inputStreamOrException.second == null){
return new Pair<HashMap<String,Object>,Exception>(null,inputStreamOrException.first);
}
HashMap<String,Object> returnMap = PaypalInitParser.parse(inputStreamOrException.second);
return new Pair<HashMap<String,Object>,Exception>(returnMap,null);
}catch (MalformedURLException murle){
murle.printStackTrace();
}catch (ParserConfigurationException pce){
pce.printStackTrace();
}catch (SAXException saxe){
saxe.printStackTrace();
}catch (IOException ioe){
ioe.printStackTrace();
}
return null;
}
@Override
protected void onCancelled(Pair<HashMap<String,Object>,Exception> result){
this.st = false;
}
@Override
protected void onPostExecute(Pair<HashMap<String,Object>,Exception> result){
if (result == null){
if (Helper.context != null){
((Interface)Helper.context).FailWithError(new Error(" AUTHORIZATION FAILED","200"));
}
this.st = false;
return;
}
if (result.second == null){
if (result.first != null && result.first.get("error") == null){
Credentials pc = (Credentials)result.first.get("result");
if (pic!= null){
pic.InitFinished(pc);
}
}else {
if (Helper.context != null){
((Interface)Helper.context).FailWithError(new Error("AUTHORIZATION FAILED","200"));
}
}
}else {
if (result.second != null)
result.second.printStackTrace();
if (Helper.context != null){
((Interface)Helper.context).FailWithError(new Error("AUTHORIZATION FAILED","200"));
}
}
this.st = false;
}
}
有没有人遇到任何相同/类似的错误?我唯一的想法是活动的主线程不再存在。但是在我的活动生命周期中,我正在检查asynctask是否正在运行或正在等待,并且我正在取消它在调用活动的onPause方法中。 任何帮助将不胜感激。提前谢谢。
答案 0 :(得分:0)
由于您说如果放置断点应用程序不会崩溃,问题在于线程。您在AsyncTask
中的代码在其他代码之前运行并创建异常。
我想在这一行中,Credentials pc = (Credentials)result.first.get("result");
结果对象尚未实例化,并且抛出了异常。
因此,在调用AsyncTask
之前,请确保正确实例化所有对象。希望这可以帮助!