繁体   English   中英

第1行的AsyncTask onPostExecute中的NullPointerException

[英]NullPointerException in AsyncTask onPostExecute on line 1

我有一个使用Bugsense的应用程序。 我从asynctask的onpostexecute方法中的bugsense中收到nullpointerexception崩溃的报告。 奇怪的是,该报告说nullpointer异常发生在com.XXXXXX.XXXXX.projectname.InitRequest.onPostExecute(:1)上。 不幸的是,我无法重现该错误。

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方法中取消它。 任何帮助将不胜感激。 提前致谢。

因为您说过放置断点不会使应用程序崩溃,所以问题出在线程上。 您的AsyncTask代码在其他代码之前运行并创建异常。

我猜在这一行中, Credentials pc = (Credentials)result.first.get("result"); 结果对象尚未实例化,并且引发了异常。

因此,在调用AsyncTask之前,请确保已正确实例化所有对象。 希望这可以帮助!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM