繁体   English   中英

onpostexecute中的意图上下文不为空,但获取空异常

[英]Context for intent in onpostexecute is not null but getting null exception

我已经为这个问题困扰了两天。 我已经检查了该论坛和其他论坛,但无法对我的问题提出足够的疑问或答案。

基本上,我试图执行从非活动onpostexecute open an activity活动的onpostexecute ,我从MainActivity中的方法中的onMarkerClick函数发送上下文(MainActivty.this)和字符串。 这将传递给非活动中的构造函数,该构造函数具有上下文和字符串的参数。

问题是我得到一个空异常,但是在调试之后,上下文不为空,它具有MainActivity的值,但是当执行该意图时,它返回一个空异常。 我也尝试了很多变化。 活动,getApplicationContext,this.context,(classname).context,(classname).this,并尝试使用全局上下文无济于事。 奇怪的是,我将意图放到了if语句if(context!= null)中,并通过了它并执行了意图,这反过来又给了我没有意义的null异常。 我知道我是Android新手,如果有人对打开活动有其他建议,将非常感谢。

E / AndroidRuntime:致命例外:主进程:com.example.quantusapps.joggertest,PID:12253 java.lang.NullPointerException:尝试在虚拟机上调用虚拟方法'java.lang.String android.content.Context.getPackageName()' android.content.ContextWrapper.getPackageName(ContextWrapper.java:131)处的空对象引用com.example.android.content.Intent。(Intent.java:4029)处的android.content.ComponentName。(ComponentName.java:77) com.example.quantusapps.joggertest.BusCoachTramInfo.onPostExecute(BusCoachTramInfo.java:25)上的.quantusapps.joggertest.BusCoachTramInfo.onPostExecute(BusCoachTramInfo.java:131)位于android.os.AsyncTask.finish(AsyncTask.java:632) android.os.Handler.dispatchMessage(Handler.java:102)上的android.os.AsyncTask.access $ 600(AsyncTask.java:177)在android.os.AsyncTask $ InternalHandler.handleMessage(AsyncTask.java:645)在android。 os.Looper.loop(Looper.java:155)在android.app.ActivityThread.main(ActivityThread.java:5696)在java.lang.reflect.Method.invoke(本地Met hod)在com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:1028)在java.lang.reflect.Method.invoke(Method.java:372)在com.android.internal.os.ZygoteInit 。主要(ZygoteInit.java:823)<

这是onMarkerClick的Mainactivity方法

mGoogleMap.setOnMarkerClickListener(new GoogleMap.OnMarkerClickListener() {

            @Override
            public boolean onMarkerClick(Marker marker) {


                String bctID = bctExtraMarkerInfo.get(marker.getId());
                BusCoachTramInfo busCoachTramInfo = new BusCoachTramInfo(bctID, MainActivity.this);
                busCoachTramInfo.execute(bctID);

                return false;
            }
        });

这是非活动构造函数。

    Context context;

    BusCoachTramInfo(String busstopID, Context context) {

    this.context = context;

    naptanIdUrl = "https://api.tfl.gov.uk/StopPoint/" + busstopID + "/Arrivals?app_key=" + tfl_API_KEY + "&app_id=9c0b3009";



}

这是发生null异常的地方。

   @Override
protected void onPostExecute(TreeMap<Integer, String[]> Map) {
    super.onPostExecute(Map);

    Intent i = new Intent(context, BusArrivalTime.class);
    context.startActivity(i);

解决问题的一种方法是将AsyncTask作为方法的一部分实施,该方法将MainActivity的实例作为参数。 另一方面, AsyncTask可以与WeakReference一起使用:

void doExecuteBusCoachTramInfo(final String busstopID, MainActivity activity){

    final WeakReference<MainActivity> wrActivity = new WeakReference<MainActivity>(MainActivity.this);
    new AsyncTask<Void, Void, TreeMap<Integer, String[]>>(){

        @Override
        protected TreeMap<Integer, String[]> doInBackground(Void... params)
        {
            // your code from BusCoachTramInfo here
        }

        @Override
        protected void onPostExecute(TreeMap<Integer, String[]> integerTreeMap)
        {
            // get back to the original Activity if possible:
            MainActivity activity = wrActivity.get();
            if (activity != null){
                Intent i = new Intent(activity, BusArrivalTime.class);
                activity.startActivity(i);
            }
        }
    }.execute();
}

该方法可能是MainActivity一部分,但它也可以属于其他类。

暂无
暂无

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

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