我有一个主持人活动和一个片段。在这个片段中,我有一个更新方法,它从数据库中加载AsyncTask中的一些数据并更新GridView。
当我从主机活动中调用此方法时,有时会得到一个NullPointerExeption,我不知道为什么...
这是Activity的方法,它是一个接口:
@Override
public void onDataSetChange() {
((CalendarFragment) getSupportFragmentManager().findFragmentByTag(Constants.FRAGMENT_CALENDAR_TAG)).updateGridView();
}
Fragment的更新方法:
public void updateGridView() {
// Loading the new updated data
mLoadingTask = new LoadingDataTask();
mLoadingTask.execute((Void) null);
}
以下是logcat中的例外:
04-17 12:05:28.366:E / AndroidRuntime(17789):致命异常:主要 04-17 12:05:28.366:E / AndroidRuntime(17789):java.lang.NullPointerException 04-17 12:05:28.366:E / AndroidRuntime(17789):at com.sk.neverforget.MainActivity.onDataSetChange(MainActivity.java:397) 04-17 12:05:28.366:E / AndroidRuntime(17789):at com.sk.neverforget.fragments.DiaryFragment $ StoringDataTask.onPostExecute(DiaryFragment.java:543) 04-17 12:05:28.366:E / AndroidRuntime(17789):at com.sk.neverforget.fragments.DiaryFragment $ StoringDataTask.onPostExecute(DiaryFragment.java:1) 04-17 12:05:28.366:E / AndroidRuntime(17789):在android.os.AsyncTask.finish(AsyncTask.java:631) 04-17 12:05:28.366:E / AndroidRuntime(17789):在android.os.AsyncTask.access $ 600(AsyncTask.java:177) 04-17 12:05:28.366:E / AndroidRuntime(17789):在android.os.AsyncTask $ InternalHandler.handleMessage(AsyncTask.java:644) 04-17 12:05:28.366:E / AndroidRuntime(17789):在android.os.Handler.dispatchMessage(Handler.java:99) 04-17 12:05:28.366:E / AndroidRuntime(17789):在android.os.Looper.loop(Looper.java:137) 04-17 12:05:28.366:E / AndroidRuntime(17789):在android.app.ActivityThread.main(ActivityThread.java:5039) 04-17 12:05:28.366:E / AndroidRuntime(17789):at java.lang.reflect.Method.invokeNative(Native Method) 04-17 12:05:28.366:E / AndroidRuntime(17789):at java.lang.reflect.Method.invoke(Method.java:511) 04-17 12:05:28.366:E / AndroidRuntime(17789):at com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:793) 04-17 12:05:28.366:E / AndroidRuntime(17789):at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560) 04-17 12:05:28.366:E / AndroidRuntime(17789):at dalvik.system.NativeStart.main(Native Method)
答案 0 :(得分:0)
在调用updateGridView之前,建议您检查CalendarFragment是否为null。添加此片段时尚不清楚。它可能尚未添加或已被删除。
@Override
public void onDataSetChange() {
CalendarFragment fragment = ((CalendarFragment)getSupportFragmentManager().findFragmentByTag(Constants.FRAGMENT_CALENDAR_TAG));
if(fragment != null) fragment.updateGridView();
}
答案 1 :(得分:0)
我发现的解决方案不是通过标签从片段管理器获取片段,而是使用保存片段的局部变量并从那里调用该方法。