Android CursorLoader和acquireUnstableProvider的异常原因是什么?
主要活动: ` ` 日志:Android CursorLoader和acquireUnstableProvider的异常原因是什么?,android,android-cursorloader,Android,Android Cursorloader,主要活动: ` ` 日志: 09-13 06:50:08.261: E/AndroidRuntime(11105): FATAL EXCEPTION: AsyncTask #1 09-13 06:50:08.261: E/AndroidRuntime(11105): java.lang.RuntimeException: An error occured while executing doInBackground() 09-13 06:50:08.261: E/AndroidRuntime(1
09-13 06:50:08.261: E/AndroidRuntime(11105): FATAL EXCEPTION: AsyncTask #1
09-13 06:50:08.261: E/AndroidRuntime(11105): java.lang.RuntimeException: An error occured while executing doInBackground()
09-13 06:50:08.261: E/AndroidRuntime(11105): at android.os.AsyncTask$3.done(AsyncTask.java:299)
09-13 06:50:08.261: E/AndroidRuntime(11105): at java.util.concurrent.FutureTask$Sync.innerSetException(FutureTask.java:273)
09-13 06:50:08.261: E/AndroidRuntime(11105): at java.util.concurrent.FutureTask.setException(FutureTask.java:124)
09-13 06:50:08.261: E/AndroidRuntime(11105): at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:307)
09-13 06:50:08.261: E/AndroidRuntime(11105): at java.util.concurrent.FutureTask.run(FutureTask.java:137)
09-13 06:50:08.261: E/AndroidRuntime(11105): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076)
09-13 06:50:08.261: E/AndroidRuntime(11105): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569)
09-13 06:50:08.261: E/AndroidRuntime(11105): at java.lang.Thread.run(Thread.java:856)
09-13 06:50:08.261: E/AndroidRuntime(11105): Caused by: java.lang.NullPointerException
09-13 06:50:08.261: E/AndroidRuntime(11105): at android.content.ContentResolver.acquireUnstableProvider(ContentResolver.java:1094)
09-13 06:50:08.261: E/AndroidRuntime(11105): at android.content.ContentResolver.query(ContentResolver.java:354)
09-13 06:50:08.261: E/AndroidRuntime(11105): at android.content.CursorLoader.loadInBackground(CursorLoader.java:65)
09-13 06:50:08.261: E/AndroidRuntime(11105): at android.content.CursorLoader.loadInBackground(CursorLoader.java:43)
09-13 06:50:08.261: E/AndroidRuntime(11105): at android.content.AsyncTaskLoader.onLoadInBackground(AsyncTaskLoader.java:301)
09-13 06:50:08.261: E/AndroidRuntime(11105): at android.content.AsyncTaskLoader$LoadTask.doInBackground(AsyncTaskLoader.java:68)
09-13 06:50:08.261: E/AndroidRuntime(11105): at android.content.AsyncTaskLoader$LoadTask.doInBackground(AsyncTaskLoader.java:56)
09-13 06:50:08.261: E/AndroidRuntime(11105): at android.os.AsyncTask$2.call(AsyncTask.java:287)
09-13 06:50:08.261: E/AndroidRuntime(11105): at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305)
09-13 06:50:08.261: E/AndroidRuntime(11105): ... 4 more
CursorLoader
从数据库中获取数据,并使用BaseAdapter将数据放入listView谢谢您的帮助。在
MyCursorLoader
编辑doInBackGround
到doInBackGround
请编辑完整的日志并粘贴到您的问题中。尝试阅读这是一件痛苦的事,它似乎没有什么。我粘贴了LogCat,谢谢。我尝试阅读LogCat,但我不知道我的问题……我建议你将你的问题标题重命名为包括“CursorLoader”和“acquireUnstableProvider”-你的CursorLoader的第65行和第43行是什么?这里可能有线索……我创建了MyCurSorLoader.class
,但我没有创建CursorLoader
,所以我不知道CursorLoader
…在活动中有DatabaseHelper引用,在CursorLoader中也有它们。我认为您的活动不应该引用DatabaseHelper。游标加载程序可能应该封装DatabaseHelper。试着逐行调试它,看看NullPointerException发生在哪里。@IwillnotexistIdonotexist:他在回答自己的问题,这在当时是很受鼓励的。话虽如此,OP最好能在答案中增加一些实质性内容
public class MyCursorLoader extends CursorLoader {
private DataBaseHelper dh = null;
private SQLiteDatabase db;
private Context context;
private String columns[], tableName;
public MyCursorLoader(Context context) {
super(context);
this.context = context;
// TODO Auto-generated constructor stub
}
public Cursor loadInBackGround() {
dh = new DataBaseHelper(context);
db = dh.getReadableDatabase();
tableName = dh.getTableName();
int i = dh.getCount();
columns = new String[i];
for (int j = 0; j < i; j++) {
columns[j] = dh.getColumns(j);
}
Cursor cursor = db.query(tableName, columns, null, null, null, null,
null);
return cursor;
}
}
public class DataBaseHelper extends SQLiteOpenHelper {
private final static int dbVersion = 1;
private final static String dbName = "PhotoerDataBase";
private final static String tableName = "AlbumTable";
private String tableColumns[] = { "_id", "Title", "Content", "Date",
"Location", "Cover" };
public DataBaseHelper(Context context) {
super(context, dbName, null, dbVersion);
// TODO Auto-generated constructor stub
}
@Override
public void onCreate(SQLiteDatabase db) {
// TODO Auto-generated method stub
final String sqlCommand = "CREATE TABLE IF NOT EXISTS " + tableName
+ "( _id INTEGER PRIMARY KEY AUTOINCREMENT, " + tableColumns[1]
+ " TEXT, " + tableColumns[2] + " TEXT, " + tableColumns[3]
+ " TEXT, " + tableColumns[4] + " TEXT, " + tableColumns[5] + " TEXT);";
db.execSQL(sqlCommand);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
// TODO Auto-generated method stub
final String sqlCommand = "DROP TABLE IF EXISTS " + tableName;
db.execSQL(sqlCommand);
onCreate(db);
}
public int getCount() {
return tableColumns.length;// return 5
}
public String getColumns(int index) {
return tableColumns[index];
}
public String getTableName() {
return tableName;
}
}
09-13 06:50:08.261: E/AndroidRuntime(11105): FATAL EXCEPTION: AsyncTask #1
09-13 06:50:08.261: E/AndroidRuntime(11105): java.lang.RuntimeException: An error occured while executing doInBackground()
09-13 06:50:08.261: E/AndroidRuntime(11105): at android.os.AsyncTask$3.done(AsyncTask.java:299)
09-13 06:50:08.261: E/AndroidRuntime(11105): at java.util.concurrent.FutureTask$Sync.innerSetException(FutureTask.java:273)
09-13 06:50:08.261: E/AndroidRuntime(11105): at java.util.concurrent.FutureTask.setException(FutureTask.java:124)
09-13 06:50:08.261: E/AndroidRuntime(11105): at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:307)
09-13 06:50:08.261: E/AndroidRuntime(11105): at java.util.concurrent.FutureTask.run(FutureTask.java:137)
09-13 06:50:08.261: E/AndroidRuntime(11105): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076)
09-13 06:50:08.261: E/AndroidRuntime(11105): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569)
09-13 06:50:08.261: E/AndroidRuntime(11105): at java.lang.Thread.run(Thread.java:856)
09-13 06:50:08.261: E/AndroidRuntime(11105): Caused by: java.lang.NullPointerException
09-13 06:50:08.261: E/AndroidRuntime(11105): at android.content.ContentResolver.acquireUnstableProvider(ContentResolver.java:1094)
09-13 06:50:08.261: E/AndroidRuntime(11105): at android.content.ContentResolver.query(ContentResolver.java:354)
09-13 06:50:08.261: E/AndroidRuntime(11105): at android.content.CursorLoader.loadInBackground(CursorLoader.java:65)
09-13 06:50:08.261: E/AndroidRuntime(11105): at android.content.CursorLoader.loadInBackground(CursorLoader.java:43)
09-13 06:50:08.261: E/AndroidRuntime(11105): at android.content.AsyncTaskLoader.onLoadInBackground(AsyncTaskLoader.java:301)
09-13 06:50:08.261: E/AndroidRuntime(11105): at android.content.AsyncTaskLoader$LoadTask.doInBackground(AsyncTaskLoader.java:68)
09-13 06:50:08.261: E/AndroidRuntime(11105): at android.content.AsyncTaskLoader$LoadTask.doInBackground(AsyncTaskLoader.java:56)
09-13 06:50:08.261: E/AndroidRuntime(11105): at android.os.AsyncTask$2.call(AsyncTask.java:287)
09-13 06:50:08.261: E/AndroidRuntime(11105): at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305)
09-13 06:50:08.261: E/AndroidRuntime(11105): ... 4 more