当前位置: 首页 > 知识库问答 >
问题:

onpostexecute中的意图上下文不是null,但正在获取null异常

蒯硕
2023-03-14

我被这个问题困扰了两天了。我已经检查了这个论坛和其他论坛,但不能得到一个问题或答案,足够接近我的问题。

基本上,我试图从非活动的OnPostExecute执行打开activity的意图,我从MainActivity中的方法中的OnMarkerClick函数发送上下文(mainActivty.this)和字符串。这将转到非activity中的一个构造函数,该构造函数具有上下文和字符串的参数。

问题是,我得到了一个空异常,但调试后,上下文不是空的,它具有MainActivity的值,但当执行意图时,它返回一个空异常。我也试过许多变体。activity,getApplicationContext,This.context,(classname).context,(classname).This并尝试了全局上下文,但没有成功.奇怪的是,我将意图放入一个if语句if(context!=null),它通过并执行意图,这反过来给我一个没有意义的null异常。我知道我是新的android,如果谁有任何其他的建议,打开activity,将非常感谢。

E/AndroidRuntime:致命异常:主进程:com.example.quantusapps.joggerTest,PID:12253 java.lang.nullPointerException:尝试在Android.content.context.getPackageName(contextwrapper.java:131)处的Android.content.context.getPackageName(contextwrapper.java:131)处的Android.content.content.context.getPackageName(contextwrapper.java:77)处的Android.content.content.content.intenthod)在java.lang.reflect.method.invoke(method.java:372)在com.android.internal.os.zygoteInit$methodandargscaller.run(zygoteInit.java:1028)在com.android.internal.os.zygoteInit.main(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;
            }
        });

这就是非activity施工方。

    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);

共有1个答案

海景曜
2023-03-14

完成任务的一种方法是将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的一部分,但也可以属于其他类。

 类似资料:
  • 我的公共类中有一个私有子类。这个私有类扩展了AsyncTask。在onPostExecute()中,我必须通过自定义适配器发送对象列表。但问题是,当我获取主公共类(私有子类的父类)的“上下文”时,它在@Override(OnPostExecute())上给出了一个错误。 它在@Override上给出了一个错误。我必须获取私有子类的父类的上下文(这扩展了asyncTask并具有onPostExecu

  • 我正在为一个项目使用。当我执行'desc table_name'时,我看到表格输出显示字段的被设置为,但是'default'被设置为。为什么一个字段没有,而默认为本身?

  • 本文向大家介绍NULL是什么意思?相关面试题,主要包含被问及NULL是什么意思?时的应答技巧和注意事项,需要的朋友参考一下 NULL这个值表示UNKNOWN(未知):它不表示“”(空字符串)。 对NULL这个值的任何比较都会生产一个NULL值。 您不能把任何值与一个 NULL值进行比较,并在逻辑上希望获得一个答案。 使用IS NULL来进行NULL判断

  • 本文向大家介绍NULL是什么意思?相关面试题,主要包含被问及NULL是什么意思?时的应答技巧和注意事项,需要的朋友参考一下 NULL(空)这个值是数据库世界里一个非常难缠的东西,所以有不少应聘者会在这个问题上跌跟头您也不要觉得意外。 NULL这个值表示UNKNOWN(未知):它不表示“”(空字符串)。假设您的SQL Server数据库里有ANSI_NULLS,当然在默认情况下会有,对NULL这个值

  • 我正在尝试解析XML文件,但我对文档有问题! 我对这一行有意见: 但是,我得到的是null而不是START\u标记。 XML HTTP POST响应: 这是我遇到问题的代码。 谢谢你的帮助!

  • 我从数据库中读取一个字符串值,并通过servlet将其打印到jsp页面上。问题是,在Jsp上,如果数据库中的字段为空,就会打印出字符串“null”。如果数据库中的值为空,我需要一个空白的编辑框。 我的数据库访问对象: 我的Servlet: 我的Jsp: 我的数据库是Oracle 11g,浏览器是FireFox。