我在下面的方法中獲得了NullPointerException
,我嘗試了所有我能想到但沒有成功的事情。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,應用程序會在上面的showCustomListView()
方法中使用NPE崩潰。我試圖清除列表,我試圖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 2014-11-04 17:59:16
它的發佈,我懷疑它有一些與片段回調方法 – 2014-11-04 18:01:50
哪一行是80行?它必須是這個對嗎?:列表 allTransactions = getTransactionList(); –
Spidy
2014-11-04 18:03:04