Android 关闭后重新初始化游标将返回nullpointerexception

Android 关闭后重新初始化游标将返回nullpointerexception,android,Android,我有一个游标对象,可以返回用户手机上的联系人。之后,我通过调用cursor.close()来关闭它。如果用户认为有必要,或者删除或添加联系人时,我允许用户刷新内容。我调用以下方法 public void refreshContent(final boolean fromOnCreate) { refresh(); clear(); adapter = null; android.os.Handler handler = new android.os.Handler

我有一个游标对象,可以返回用户手机上的联系人。之后,我通过调用
cursor.close()来关闭它。如果用户认为有必要,或者删除或添加联系人时,我允许用户刷新内容。我调用以下方法

public void refreshContent(final boolean fromOnCreate) {
    refresh();
    clear();
    adapter = null;
    android.os.Handler handler = new android.os.Handler();
    handler.postDelayed(new Runnable() {
        @Override
        public void run() {
            if (cr == null) {
                Toast.makeText(returnContext(), "CR NULL_refreshCheckBeginningOfRun", Toast.LENGTH_SHORT).show();
            } else {
                fetchContacts();
                adapter = new LibraryAdapter(returnContext());
                mRecyclerView.setAdapter(adapter);
                if (fromOnCreate) {
                    mSwipeLayout.setRefreshing(false);
                }
            }
        }
    }, 1000);
}

public void refresh(){
    if (cursor.isClosed()){
        cursor = cr.query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, null, null, ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME);
    }
}
当用户向下滑动刷新时,该方法工作正常,但如果在我添加联系人或删除联系人时调用该方法,则游标将返回null

这是LogCat:

java.lang.NullPointerException: Attempt to invoke virtual method 'android.database.Cursor android.content.ContentResolver.query(android.net.Uri, java.lang.String[], java.lang.String, java.lang.String[], java.lang.String)' on a null object reference
        at com.vinodh.android.kontakt.MainActivity.refresh(MainActivity.java:127)
        at com.vinodh.android.kontakt.MainActivity.refreshContent(MainActivity.java:104)
        at com.vinodh.android.kontakt.LibraryAdapter$MyViewHolder$1$1.onClick(LibraryAdapter.java:167)
        at com.android.internal.app.AlertController$AlertParams$3.onItemClick(AlertController.java:1017)
        at android.widget.AdapterView.performItemClick(AdapterView.java:300)
        at android.widget.AbsListView.performItemClick(AbsListView.java:1247)
        at android.widget.AbsListView$PerformClick.run(AbsListView.java:3215)
        at android.widget.AbsListView.onTouchUp(AbsListView.java:4021)
        at android.widget.AbsListView.onTouchEvent(AbsListView.java:3793)
        at android.view.View.dispatchTouchEvent(View.java:8444)
        at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2430)
        at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2158)
        at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2436)
        at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2178)
        at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2436)
        at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2178)
        at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2436)
        at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2178)
        at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2436)
        at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2178)
        at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2436)
        at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2178)
        at com.android.internal.policy.impl.PhoneWindow$DecorView.superDispatchTouchEvent(PhoneWindow.java:2386)
        at com.android.internal.policy.impl.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1727)
        at android.app.Dialog.dispatchTouchEvent(Dialog.java:765)
        at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchTouchEvent(PhoneWindow.java:2335)
        at android.view.View.dispatchPointerEvent(View.java:8655)
        at android.view.ViewRootImpl$ViewPostImeInputStage.processPointerEvent(ViewRootImpl.java:4238)
        at android.view.ViewRootImpl$ViewPostImeInputStage.onProcess(ViewRootImpl.java:4094)
        at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3635)
        at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:3694)
        at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:3660)
        at android.view.ViewRootImpl$AsyncInputStage.forward(ViewRootImpl.java:3773)
        at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:3668)
        at android.view.ViewRootImpl$AsyncInputStage.apply(ViewRootImpl.java:3830)
        at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3640)
        at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:3694)
        at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:3660)
        at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:3668)
        at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3640)
        at android.view.ViewRootImpl.deliverInputEvent(ViewRootImpl.java:5940)
        at android.view.ViewRootImpl.doProcessInputEvents(ViewRootImpl.java:5908)
        at android.view.ViewRootImpl.enqueueInputEvent(ViewRootImpl.java:5872)
        at android.view.ViewRootImpl$WindowInputEventReceiver.onInputEvent(ViewRootImpl.java:6030)
        at android.view.InputEventReceiver.dispatchInputEvent(InputEventReceiver.java:211)
        at android.os.MessageQueue.nativePollOnce(Native Method)
        at android.os.MessageQueue.next(MessageQueue.java:153)
        at android.os.Looper.loop(Looper.java:131)
        at android.app.ActivityThread.main(ActivityThread.java:5696)
        at java.lang.reflect.Method.invoke(Native Method)
        at java.lang.reflect.Metho
导致这种情况的行是:
cursor=cr.query(ContactsContract.commonDataTypes.Phone.CONTENT\u URI,null,null,null,ContactsContract.commonDataTypes.Phone.DISPLAY\u NAME)

为什么我会犯这个错误

编辑:这就是我初始化cr对象的方式

cr = context.getContentResolver();
    cursor = cr.query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, null, null, ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME);
    if (cr != null) {
        fetchContacts();
    }

其中
cr
已初始化?@shhp在onCreate()中初始化;as cr=this.getContentResolver();似乎
cr
而不是
cursor
为空。可能在调用
refresh
时,
cr
尚未初始化?