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)
любая идея, как я могу решить эту проблему?
Ответы
Ответ 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,
это сработало для меня