【问题标题】:NullPointerException when calling a cursor using contentprovider使用 contentprovider 调用游标时出现 NullPointerException
【发布时间】:2014-01-08 22:30:10
【问题描述】:

我在调用游标时不断收到 NullPointerException。 db 填充在 FragmentList 中,其中有一个光标适配器并显示列表,然后当按下其中一个项目时,主要活动调用 FragmentDetails 以显示来自 db 的有关所选项目的信息。

片段详细信息:

public class FragmentDetails extends Fragment implements LoaderCallbacks<Cursor>{

private static Context mContext;     

public static FragmentDetails newInstance(long id){

    Uri uri = PlacesContract.Places.CONTENT_URI;

    Cursor cursor = mContext.getContentResolver().query(uri,null, null, null, null);
    cursor.moveToFirst();

主要活动:

@Override
public void onItemSelected(long id) {
    FragmentManager fm = getSupportFragmentManager();
    FragmentTransaction ft = fm.beginTransaction();
    ft.setCustomAnimations(R.anim.slide_in_from_bottom,
            R.anim.slide_out_to_bottom, R.anim.slide_in_from_bottom,
            R.anim.slide_out_to_bottom);
    Fragment detailsFragment = FragmentDetails.newInstance(id);

LogCat:

01-08 14:11:17.489: E/AndroidRuntime(2005): FATAL EXCEPTION: main
01-08 14:11:17.489: E/AndroidRuntime(2005): java.lang.NullPointerException
01-08 14:11:17.489: E/AndroidRuntime(2005):     at com.lora_solomon.myfavoriteplaces.view.FragmentDetails.newInstance(FragmentDetails.java:57)
E/AndroidRuntime(2005):     at com.lora_solomon.myfavoriteplaces.view.MainActivity.onItemSelected(MainActivity.java:92)
E/AndroidRuntime(2005):     at com.lora_solomon.myfavoriteplaces.view.FragmentList.onItemClick(FragmentList.java:113)
E/AndroidRuntime(2005):     at android.widget.AdapterView.performItemClick(AdapterView.java:298)
E/AndroidRuntime(2005):     at android.widget.AbsListView.performItemClick(AbsListView.java:1086)
01-08 14:11:17.489: E/AndroidRuntime(2005):     at android.widget.AbsListView$PerformClick.run(AbsListView.java:2855)
01-08 14:11:17.489: E/AndroidRuntime(2005):     at android.widget.AbsListView$1.run(AbsListView.java:3529)
01-08 14:11:17.489: E/AndroidRuntime(2005):     at android.os.Handler.handleCallback(Handler.java:615)
01-08 14:11:17.489: E/AndroidRuntime(2005):     at android.os.Handler.dispatchMessage(Handler.java:92)
01-08 14:11:17.489: E/AndroidRuntime(2005):     at android.os.Looper.loop(Looper.java:137)
01-08 14:11:17.489: E/AndroidRuntime(2005):     at android.app.ActivityThread.main(ActivityThread.java:4745)
01-08 14:11:17.489: E/AndroidRuntime(2005):     at java.lang.reflect.Method.invokeNative(Native Method)
01-08 14:11:17.489: E/AndroidRuntime(2005):     at java.lang.reflect.Method.invoke(Method.java:511)
01-08 14:11:17.489: E/AndroidRuntime(2005):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786)
01-08 14:11:17.489: E/AndroidRuntime(2005):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
01-08 14:11:17.489: E/AndroidRuntime(2005):     at dalvik.system.NativeStart.main(Native Method)

任何帮助将不胜感激!

【问题讨论】:

    标签: android android-fragments cursor android-contentprovider


    【解决方案1】:

    从您发布的代码来看,mContext 似乎没有被初始化。我猜那是你的空指针异常。

    我需要指出,保持对上下文的静态引用不是一个好主意,并且可以将活动或服务在其生命周期结束后保留​​在内存中。相反,您可能希望将查询移动到片段的 onCreate 方法或将上下文作为参数传递给 newInstance。

    如果您想了解上下文及其可能存在的一些陷阱,我认为这篇文章非常好: http://www.doubleencore.com/2013/06/context/

    【讨论】:

    • 我认为这是问题所在。但我找不到启动它的方法。我会看一下这篇文章,tx 供参考。
    猜你喜欢
    • 2016-03-31
    • 2013-12-29
    • 2015-02-13
    • 2012-01-21
    • 2012-08-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多