gpt4 book ai didi

android - CursorLoader 构造函数中的空指针异常

转载 作者:行者123 更新时间:2023-11-30 04:38:11 26 4
gpt4 key购买 nike

我在调试空指针异常时遇到了一些困难。

E/AndroidRuntime( 1760): java.lang.RuntimeException: Unable to instantiate application edu.lafayette.cs.geology.GeoDatabase: java.lang.NullPointerException

...

E/AndroidRuntime( 1760): Caused by: java.lang.NullPointerException
E/AndroidRuntime( 1760): at android.content.ContextWrapper.getApplicationContext(ContextWrapper.java:101)
E/AndroidRuntime( 1760): at android.content.Loader.<init>(Loader.java:85)
E/AndroidRuntime( 1760): at android.content.AsyncTaskLoader.<init>(AsyncTaskLoader.java:90)
E/AndroidRuntime( 1760): at android.content.CursorLoader.<init>(CursorLoader.java:113)
E/AndroidRuntime( 1760): at edu.lafayette.cs.geology.GeoDatabase.createLoader(GeoDatabase.java:123)

这是我代码中的相关方法createLoader。

private CursorLoader createLoader(int id) {
Uri tableUri;
String[] projection;

// Set the URI to query depending on the id of this loader.
switch (id) {
case LOCAL_FOLDER_LOADER:
tableUri = LocalProvider.CONTENT_URI_FOLDER;
projection = Folder.COLUMNS;
break;
case LOCAL_BEDDING_LOADER:
tableUri = LocalProvider.CONTENT_URI_BEDDING;
projection = Bedding.COLUMNS;
break;
case LOCAL_CONTACT_LOADER:
tableUri = LocalProvider.CONTENT_URI_CONTACT;
projection = Contact.COLUMNS;
break;
case LOCAL_FAULT_LOADER:
tableUri = LocalProvider.CONTENT_URI_FAULT;
projection = Fault.COLUMNS;
break;
case LOCAL_JOINT_SET_LOADER:
tableUri = LocalProvider.CONTENT_URI_JOINT_SET;
projection = JointSet.COLUMNS;
break;
default:
throw new IllegalArgumentException("Unknown cursor loader id");
}

// Load up that cursor loader. Next, onLoadComplete is called.
Log.d("createLoader", ""+tableUri);
Log.d("createLoader", ""+projection);
Log.d("createLoader", ""+this);
CursorLoader cursorLoader = new CursorLoader(this, tableUri,
projection, null, null, null);
Log.d("createLoader", "statement reached");
cursorLoader.registerListener(id, this);
return cursorLoader;
}

第 125 行是在日志语句之间调用 CursorLoader 构造函数的行。日志显示tableUriprojection,当然还有this都不为空。永远不会到达“已到达声明”电话。构造函数调用中的其余空值应该在那里,它们是 specified in the API .我可以更改构造函数调用以使用字符串文字和数组而不是这三个空值,并抛出相同的异常。有人知道怎么回事吗?

我很想查看 CursorLoader 源代码以获取线索,但 Google 尚未发布此“开源”项目的 API 级别 12 中类的源代码。

最佳答案

问题与 CursorLoader 无关,是我在构造函数完成之前向 CursorLoader 传递了对 this 的引用。方法 createLoader 由一个方法调用,该方法由构造函数调用的方法调用。

此代码位于 Application 的子类中,据我所知,这是一种不好的做法,因为我使用它的目的只是在 Activity 之间共享数据,而这应该通过 Intents 和 Bundle 来完成。所以我实际上只是更改了构造函数的方法 header 以覆盖 onCreate 方法,这更合适,并解决了我的问题。

关于android - CursorLoader 构造函数中的空指针异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6469692/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com