Я получаю NullPointerException
следующим образом, и я пробовал все, что мог, без успеха.Необъяснимое исключение Null Pointer в Android
private void showCustomListView(int year, int month, int day) {
List<Transaction> mTransactionList = new ArrayList<Transaction>();
mTransactionList = AppManager.getTransactionsByDay(year, month, day);
DailyTransactionAdapter mAdapter = new DailyTransactionAdapter(getActivity(), 0, mTransactionList);
dailyTransactionListView.setAdapter(mAdapter);
}
Вот контекст: У меня есть активность: Activity_A
хостинг Fragment_A
. Описанный выше метод вызывается из onResume()
обратного вызова Fragment_A и вот что о nResume()
метода
@Override
public void onResume() {
super.onResume();
//When the Fragment resumes set the shown date to today
mYear = selectedDate.get(Calendar.YEAR);
mMonth = selectedDate.get(Calendar.MONTH);
mDay = selectedDate.get(Calendar.DAY_OF_MONTH);
tvDisplayDate.setText(new StringBuilder()
.append(mMonth + 1).append("-").append(mDay).append("-")
.append(mYear).append(" "));
showCustomListView(mYear, mMonth, mDay);
btnChangeDate.setOnClickListener(new View.OnClickListener() {
@Override
//After the view is created set the onclick lister for the
//Change date button
public void onClick(View view) {
showDatePicker();
}
});
}
данные для этого адаптера исходит из списка в памяти, как это. Это раздел кода из AppManager
public static List<Transaction> getTransactionsByDay(int year, int month, int day){
List<Transaction> dayTransactions = new ArrayList<Transaction>();
List<Transaction> allTransactions = getTransactionList();
Log.i(TAG, "Size: " + allTransactions.size());
for (Transaction tempTransaction : allTransactions){
if (tempTransaction.getTransactionDate().get(Calendar.YEAR) == year &&
tempTransaction.getTransactionDate().get(Calendar.MONTH) == month &&
tempTransaction.getTransactionDate().get(Calendar.DAY_OF_MONTH) == day)
{
dayTransactions.add(tempTransaction);
}
}
return dayTransactions;
}
Это прекрасно работает, как и ожидалось, когда я запустить приложение как в запуске приложения из IDE (Android Studio) к устройству. Проблема возникает, когда я запускаю другой Activity-Activity_B после того, как приведенный выше список работает и видим, а в Activity_B я добавляю элемент в список в памяти, а размер списка идет, например, от 10 до 11.
Когда я теперь перейдите из Activity_B в Fragment_A, приложение вылетает с NPE по методу showCustomListView()
выше. Я попытался очистить список, я пробовал adapter.notifydatasetchanged()
все без успеха, он продолжает сбой при этом методе только после добавления в список во время работы приложения, он будет работать нормально после перезапуска приложения.
Что еще я должен попробовать: Вот некоторые из NPE
11-04 09:36:19.147 6464-6464/com.valuecardnfc.valuecardnfc E/AndroidRuntime﹕ FATAL EXCEPTION: main
Process: com.valuecardnfc.valuecardnfc, PID: 6464
java.lang.NullPointerException
at com.valuecardnfc.valuecardnfc.Models.AppManager.getTransactionsByDay(AppManager.java:80)
at com.valuecardnfc.valuecardnfc.Fragments.DailyTransactionFragment.showCustomListView(DailyTransactionFragment.java:160)
at com.valuecardnfc.valuecardnfc.Fragments.DailyTransactionFragment.onResume(DailyTransactionFragment.java:102)
at android.support.v4.app.Fragment.performResume(Fragment.java:1521)
at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:963)
at android.support.v4.app.FragmentManagerImpl.performPendingDeferredStart(FragmentManager.java:823)
at android.support.v4.app.FragmentManagerImpl.startPendingDeferredFragments(FragmentManager.java:1128)
at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1477)
at android.support.v4.app.FragmentManagerImpl.executePendingTransactions(FragmentManager.java:472)
at android.support.v4.app.FragmentPagerAdapter.finishUpdate(FragmentPagerAdapter.java:141)
at android.support.v4.view.ViewPager.populate(ViewPager.java:1068)
at android.support.v4.view.ViewPager.populate(ViewPager.java:914)
at android.support.v4.view.ViewPager.onMeasure(ViewPager.java:1436)
at android.view.View.measure(View.java:16497)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5125)
at android.widget.FrameLayout.onMeasure(FrameLayout.java:310)
at android.view.View.measure(View.java:16497)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5125)
at com.android.internal.widget.ActionBarOverlayLayout.onMeasure(ActionBarOverlayLayout.java:327)
at android.view.View.measure(View.java:16497)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5125)
at android.widget.FrameLayout.onMeasure(FrameLayout.java:310)
at com.android.internal.policy.impl.PhoneWindow$DecorView.onMeasure(PhoneWindow.java:2291)
Можете вы добавить код для AppManager.getTransactionsByDay? В частности, строка 80 в этом коде - это то место, куда бросается NPE. Моя первая мысль - механизм очистки Android уничтожает и воссоздает активность или фрагмент, и данные не сохраняются – Spidy
Его опубликовали, я подозреваю, что он имеет что-то с методами обратного вызова Fragment –
Какая строка линии 80? Это должно быть правильно: Список allTransactions = getTransactionList(); –
Spidy