首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Android -来自创建适配器的NullPointerException

Android -来自创建适配器的NullPointerException
EN

Stack Overflow用户
提问于 2015-02-10 00:27:40
回答 4查看 23.1K关注 0票数 16

我正在为一个列表视图创建一个数组适配器,一切正常,我有两个片段,以及在这两个片段之间变化的操作栏顶部的两个按钮。我的问题是,如果我在这些片段之间移动得太快,当我打开fragOne,切换到fragTwo,然后快速移回fragOne时,我会崩溃。fragOne从getActivity上下文中抛出NPE。

这就是崩溃的代码行:

adapter = new MainFragmentDocumentAdapter(getActivity(), docsList, DocumentsFragment.this, page);

日志报告:

E/AndroidRuntime﹕ FATAL EXCEPTION: main
Process: com.bbb.app, PID: 17438
java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.Object android.content.Context.getSystemService(java.lang.String)' on a null object reference
        at android.widget.ArrayAdapter.init(ArrayAdapter.java:310)
        at android.widget.ArrayAdapter.<init>(ArrayAdapter.java:104)
        at com.bbb.app.UI.adapters.MainFragmentDocumentAdapter.<init>(MainFragmentDocumentAdapter.java:51)

你知道我怎么解决这个问题吗?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2015-03-02 17:36:14

因此,基本上经过大量检查后,我发现问题在于我在不同的片段中返回到该片段,因为我有一个侦听器在那里指出并试图打开该方法。

基本上我只是把它包装在一个

if (getActivity() != null) {
    // Code goes here.
}

问题就解决了。

不过,还是非常感谢大家的帮助!

票数 43
EN

Stack Overflow用户

发布于 2015-09-01 19:37:14

如果您使用的是片段,请检查是否添加了该片段。

{
    ... 

    if (!this.isAdded()) { //this = current fragment
        return;
    }
    LocationManager locationManager = (LocationManager) getActivity().getSystemService(Context.LOCATION_SERVICE);
    ...
}
票数 2
EN

Stack Overflow用户

发布于 2015-05-22 17:29:57

你可以这样做。

内部活动

public static UsageRecommendationTabActivity getInstance() {
        return activityInstance;
    }
@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
activityInstance=this;
}

内部片段

 @Override
    public void onAttach(Activity activity) {
        // TODO Auto-generated method stub
        super.onAttach(activity);
        if (activity instanceof UsageRecommendationTabActivity)
            mParentActivity = (UsageRecommendationTabActivity) activity;
        if (mParentActivity == null)
            mParentActivity = UsageRecommendationTabActivity.getInstance();
    }

然后调用您的适配器

adapter = new MainFragmentDocumentAdapter(mParentActivity, docsList, DocumentsFragment.this, page);
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28414480

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档