引起:java.lang.NullPointerException:尝试调用接口方法'android.support.v4.content.Loader

时间:2017-02-01 14:37:53

标签: android nullpointerexception appcompatactivity

我有一个活动,我正在尝试加载AsyncTaskLoader

但是,我在行

中得到一个NullPointerException
getSupportLoaderManager().initLoader(0,null,null).forceLoad();

工作正常,但我突然开始看到这次崩溃。

我花了好几个小时试图弄清楚它为什么会发生但找不到任何东西。

我的活动有以下导入:

import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentTransaction;
import android.support.v4.app.LoaderManager;
import android.support.v4.content.AsyncTaskLoader;
import android.support.v4.content.Loader;
import android.support.v7.app.ActionBar;
import android.support.v7.app.AppCompatActivity;

并扩展AppCompatActivity

这是我的StackTrace供参考:

Caused by: java.lang.NullPointerException: Attempt to invoke interface method 'android.support.v4.content.Loader android.support.v4.app.LoaderManager$LoaderCallbacks.onCreateLoader(int, android.os.Bundle)' on a null object reference
                                                                            at android.support.v4.app.LoaderManagerImpl.createLoader(LoaderManager.java:539)
                                                                            at android.support.v4.app.LoaderManagerImpl.createAndInstallLoader(LoaderManager.java:548)
                                                                            at android.support.v4.app.LoaderManagerImpl.initLoader(LoaderManager.java:603)
                                                                            at in.com.example.app.Activity.ExperiencesNTravel.CategoryVideoListActivity.onCreate(CategoryVideoListActivity.java:106)
                                                                            at android.app.Activity.performCreate(Activity.java:6251)
                                                                            at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1107)
                                                                            at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2369)
                                                                            at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2476) 
                                                                            at android.app.ActivityThread.-wrap11(ActivityThread.java) 
                                                                            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1344) 
                                                                            at android.os.Handler.dispatchMessage(Handler.java:102) 
                                                                            at android.os.Looper.loop(Looper.java:148) 
                                                                            at android.app.ActivityThread.main(ActivityThread.java:5417) 
                                                                            at java.lang.reflect.Method.invoke(Native Method)

2 个答案:

答案 0 :(得分:2)

#initLoader中的第三个参数需要" LoaderManager.LoaderCallbacks"打回来。你应该传入"这个"并实现回调,否则它将尝试在null上调用它。

请参阅:LoaderManager Documentation

答案 1 :(得分:0)

为了解决这个问题,我在我的 LoaderManager.LoaderCallbacks <Cursor> 中实现了 Fragment 及其方法,通过这种方式,我将 this 作为 initLoader 的第三个参数传递,并且它正常工作。