CursorLoader和acquireUnstableProvider的异常原因?

时间:2014-09-12 22:29:57

标签: android android-cursorloader

MainActivity:

`

public class MainActivity extends Activity implements LoaderCallbacks<Cursor>{

private LinearLayout mainLayout;

private ListView mainList;

private DataBaseHelper dh = null;

//  private MyBaseAdapter myBaseAdapter;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    DBOpen();

    findView();

    getLoaderManager().initLoader(1, null, this);

}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.main, menu);
    return true;
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {

    // Handle action bar item clicks here. The action bar will
    // automatically handle clicks on the Home/Up button, so long
    // as you specify a parent activity in AndroidManifest.xml.
    int id = item.getItemId();
    if (id == R.id.action_settings) {
        return true;
    }
    switch (item.getItemId()) {
    case R.id.action_settings:
        return true;
    }
    return super.onOptionsItemSelected(item);
}


private void findView() {

    mainLayout = (LinearLayout) findViewById(R.id.MainLayout);

    mainList = (ListView)findViewById(R.id.mainList);

}

private void DBOpen() {
    dh = new DataBaseHelper(this);
}

@Override
public Loader<Cursor> onCreateLoader(int id, Bundle args) {
    // TODO Auto-generated method stub
    return new MyCursorLoader(getApplication());
}

@Override
public void onLoadFinished(Loader<Cursor> loader, Cursor data) {
    // TODO Auto-generated method stub
//      myBaseAdapter = new MyBaseAdapter(this,data);
//      mainList.setAdapter(myBaseAdapter);
}

@Override
public void onLoaderReset(Loader<Cursor> loader) {
    // TODO Auto-generated method stub

}

}

`

MyCursorLoader:

`

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;
}
}

`

DataBaseHelper:

`

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;
}

}

`

logcat的:

enter image description here

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
  1. 我使用CursorLoader从我的数据库中获取数据,然后使用BaseAdapter将数据放入listView。
  2. 任何人都可以告诉我代码中有什么问题?我不知道这个问题。 谢谢你的帮助。

1 个答案:

答案 0 :(得分:1)

MyCursorLoader修改doInBackGrounddoInBackground