1

我有一个主机活动和一个片段。在这个片段中,我有一个更新方法,它从数据库中加载 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): 在 com.sk.neverforget.MainActivity.onDataSetChange(MainActivity.java:397) 04-17 12:05:28.366: E/AndroidRuntime(17789): 在 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): at 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): 在 java.lang.reflect.Method.invokeNative(Native Method) 04-17 12:05:28.366: E/AndroidRuntime(17789) : 在 java.lang.reflect.Method.invoke(Method.java:511) 04-17 12:05:28.366: E/AndroidRuntime(17789): 在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit .java:793) 04-17 12:05:28.366: E/AndroidRuntime(17789): 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560) 04-17 12:05:28.366:E/AndroidRuntime(17789): 在 dalvik.system.NativeStart.main(Native Method)

4

2 回答 2

0

在调用 updateGridView 之前,建议检查您的 CalendarFragment 是否为空。添加此片段时尚不清楚。它可能尚未添加或已删除。

@Override
public void onDataSetChange() {

CalendarFragment fragment =  ((CalendarFragment)getSupportFragmentManager().findFragmentByTag(Constants.FRAGMENT_CALENDAR_TAG));
if(fragment != null) fragment.updateGridView();
}
于 2013-04-17T12:08:22.707 回答
0

我找到的解决方案不是通过标签从片段管理器中获取片段,而是使用保存片段的局部变量并从那里调用方法。

于 2013-04-17T12:10:58.007 回答