2014-09-12 80 views
0

MainActivity:CursorLoader和acquireUnstableProvider的異常原因?

`

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中。

任何人都可以告訴我我的代碼有什麼問題嗎?我不知道這個問題。 感謝您的幫助。

+1

請編輯和** **糊滿logcat的到你的問題。試圖閱讀這是一個痛苦,它似乎並沒有一切。 – codeMagic 2014-09-12 22:34:30

+0

我已經粘貼了LogCat,謝謝。我試圖閱讀LogCat,但我不知道我的問題....... – jacky810124 2014-09-12 22:54:42

+0

我建議您重命名您的問題標題以包含「CursorLoader」和「acquireUnstableProvider」 - 你的CursorLoader的第65和43行是什麼?可能是一個線索... – Jim 2014-09-12 22:55:09

回答

1

MyCursorLoader編輯doInBackGrounddoInBackground

+0

對不起.........,但這是對這個問題的答案。 – jacky810124 2014-09-13 20:33:05

+0

@IwillnotexistIdonotexist:他正在回答他自己的問題,這在SO中得到了鼓勵。這就是說,對於OP來說,增加一點實質性的答案會很好 – Devin 2014-09-13 20:36:16