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的:
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。任何人都可以告诉我代码中有什么问题?我不知道这个问题。 谢谢你的帮助。
答案 0 :(得分:1)
在MyCursorLoader
修改doInBackGround
至doInBackground