[英]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.