【问题标题】:NullPointerException in restartLoader Method of LoaderManagerLoaderManager 的 restartLoader 方法中的 NullPointerException
【发布时间】:2012-05-28 12:40:42
【问题描述】:

我的 Fragment 中有以下自己的接口实现:

@Override
    public void onReportChanged(Fragment sender, long id, int position) {
        // Views ein und ausblenden
        _List.setVisibility(View.GONE);
        _OnLoading.setVisibility(View.VISIBLE);
        _NoDataView.setVisibility(View.GONE);
        _ReportId = id;
        getLoaderManager().restartLoader(_LM_REPORTS, null, this);
    };

FragmentActivity 向这个 Fragment 报告,另一个 Fragment(选择列表)已经选择了一个项目。之后,ListFragment 应加载具有报告 ID (_ReportId) 的新数据。

但在转到 onCreateLoader-Method 之前,我在此代码上得到了 NullPoinerException。这是 LogCat:

05-28 14:24:37.905: E/AndroidRuntime(1775): FATAL EXCEPTION: main
05-28 14:24:37.905: E/AndroidRuntime(1775): java.lang.NullPointerException
05-28 14:24:37.905: E/AndroidRuntime(1775):     at android.support.v4.app.LoaderManagerImpl.restartLoader(LoaderManager.java:637)
05-28 14:24:37.905: E/AndroidRuntime(1775):     at de.webducer.android.worktime.beta.ui.fragment.ReportListFragment.onReportChanged(ReportListFra gment.java:142)
05-28 14:24:37.905: E/AndroidRuntime(1775):     at de.webducer.android.worktime.beta.ui.ReportListActivity.onReportSelected(ReportListActivity.java:97)
05-28 14:24:37.905: E/AndroidRuntime(1775):     at de.webducer.android.worktime.beta.ui.fragment.ReportSelectorSpinnerFragment$1.onItemSelected(ReportSelectorSpinnerFragment.java:78)
05-28 14:24:37.905: E/AndroidRuntime(1775):     at android.widget.AdapterView.fireOnSelected(AdapterView.java:882)
05-28 14:24:37.905: E/AndroidRuntime(1775):     at android.widget.AdapterView.access$200(AdapterView.java:48)
05-28 14:24:37.905: E/AndroidRuntime(1775):     at android.widget.AdapterView$SelectionNotifier.run(AdapterView.java:848)
05-28 14:24:37.905: E/AndroidRuntime(1775):     at android.os.Handler.handleCallback(Handler.java:605)
05-28 14:24:37.905: E/AndroidRuntime(1775):     at android.os.Handler.dispatchMessage(Handler.java:92)
05-28 14:24:37.905: E/AndroidRuntime(1775):     at android.os.Looper.loop(Looper.java:137)
05-28 14:24:37.905: E/AndroidRuntime(1775):     at android.app.ActivityThread.main(ActivityThread.java:4424)
05-28 14:24:37.905: E/AndroidRuntime(1775):     at java.lang.reflect.Method.invokeNative(Native Method)
05-28 14:24:37.905: E/AndroidRuntime(1775):     at java.lang.reflect.Method.invoke(Method.java:511)
05-28 14:24:37.905: E/AndroidRuntime(1775):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
05-28 14:24:37.905: E/AndroidRuntime(1775):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
05-28 14:24:37.905: E/AndroidRuntime(1775):     at dalvik.system.NativeStart.main(Native Method)

我不明白为什么。相同的代码(但对于另一个列表)在另一个 FragmentActivity 上运行良好。

【问题讨论】:

    标签: android nullpointerexception android-cursor android-loadermanager


    【解决方案1】:

    我找到了原因:

    @Override
    public Loader<Cursor> onCreateLoader(int id, Bundle extra) {
        CursorLoader returnValue = null;
        if (_ReportId > 0) {
            switch (id) {
                case _LM_REPORTS:
                    returnValue = new CursorLoader(getActivity(),
                        ReportContentProvider.CONTENT_URI_REPORT_DATA,
                        null,
                        ReportTable.COLUMN_ID + " =?",
                        new String[] { String.valueOf(_ReportId) },
                        null);
                        break;
    
                    default:
                        break;
                }
            }
        return returnValue;
    }
    

    加载程序总是可以运行的。条件if (_ReportId &gt; 1) 产生了异常。没有条件,代码运行良好。

    【讨论】:

    • 我还是没看懂解释...你能再详细点吗?什么是:“加载程序必须始终运行”?
    • 我相信他的意思是如果_ReportId=-1,它就不会创建一个加载器所以“returnValue=null”的值。然后加载器管理器尝试启动一个空加载器并抛出空指针。
    • 这里报告的 id 是什么
    • _ReportId 是我从 Intent 获得的 ID(此加载器用于详细活动,用于编辑现有 => _ReportId &gt; 0,以及创建新 => @987654325 @数据)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-05
    相关资源
    最近更新 更多