Android - 创建适配器的NullPointerException

时间:2015-02-09 16:27:40

标签: java android android-fragments

我正在为列表视图创建一个数组适配器, 一切正常,我有2个片段,动作栏顶部的2个按钮在这2个片段之间发生变化。 我的问题是,如果我在这些碎片之间移动太快,我会崩溃,当我打开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)

任何想法如何解决这个问题?

5 个答案:

答案 0 :(得分:43)

所以基本上经过大量的检查后我发现问题是我在一个不同的片段里面回到那个片段,因为我有一个监听器指出那里并试图打开那个方法。

基本上我只是把它包裹在

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

问题解决了。

非常感谢所有帮助人员!

答案 1 :(得分:2)

如果您正在片段中检查是否添加了片段。

{
    ... 

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

答案 2 :(得分:1)

你可以这样做。

内部活动

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

答案 3 :(得分:0)

添加对getContext()的检查!= null

阻止之前

mAdapter = new SimpleHomeItemAdapter(getActivity(), mList);
listview.setAdapter(mAdapter);

例如:

if (getActivity()!=null){

mAdapter = new SimpleHomeItemAdapter(getActivity(), mList);
listview.setAdapter(mAdapter);

}

答案 4 :(得分:-1)

使用try catch块, 它对我有用

相关问题