Подтвердить что ты не робот

Android - NullPointerException от создания адаптера

Я создаю адаптер массива для просмотра списка, все работает нормально, у меня есть 2 фрагмента и 2 кнопки в верхней части панели действий, которая изменяется между этими двумя фрагментами. моя проблема в том, что я получаю сбои, если я слишком быстро перехожу между этими фразами, когда я открываю fragOne, переключаюсь на fragTwo, а затем быстро возвращаюсь к fragOne.. fragOne выдает NPE из контекста getActivity.

что сбойная строка:

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)

любая идея, как я могу решить эту проблему?

4b9b3361

Ответ 1

Итак, в основном после многих проверок выяснилось, что проблема заключалась в том, что я возвращался к этому фрагменту, находясь внутри другого фрагмента, потому что у меня был слушатель, указывающий туда и пытающийся открыть этот метод.

в основном я просто завернул его в

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

и проблема решена.

Большое спасибо, хотя для всех парней помощи!

Ответ 2

если вы на флаге проверяете, добавлен ли фрагмент.

{
    ... 

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

Ответ 3

вы можете сделать это.

внутренняя активность

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

Ответ 4

Добавить проверку для getContext()!= null

Перед блоком

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

Например:

if (getActivity()!=null){

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

}

Ответ 5

Используйте блок catch try, это сработало для меня