排錯經驗:不要因爲某個變量簡單熟悉就忽略對該值的檢查,由此體現代碼的健壯的重要性。
報錯:NullPointException,錯誤處:lv.setAdapter(adapter);
也就是說,lv或adapter傳值爲空。
前期把精力全部投入到SimpleCursorAdapter,包括“_id”和API 11新出現的SimpleCursorAdapter的構造方法中出現的新的變量flags。(flags即標誌,FLAG_REGISTER_CONTENT_OBSERVER的標誌,即說明這個適配器是否註冊到CONTENT_OBSERVER)
…..
最後通過:
if(lv != null){
if(adapter != null){
lv.setAdapter(adapter);
}else{
Log.v("空值", "adapter爲空");
}
}else{
Log.v("空值", "lv爲空");
}
發現是lv的值為空。
package com.study.test02;
import android.app.Activity;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.util.Log;
import android.widget.CursorAdapter;
import android.widget.ListView;
import android.widget.SimpleCursorAdapter;
import com.study.port.SQLiteHelper;
/**
* 數據庫SQLite訪問
*
* @author lenov
*
*/
public class Activity_01 extends Activity {
ListView lv;
SQLiteHelper helper;
SQLiteDatabase db;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.layout_activity01);
lv = (ListView)findViewById(R.id.lv_activity01);
helper = new SQLiteHelper(this, 1);
db = helper.getWritableDatabase();
/**
* 兩種查詢方式,query()和rawQuery()
*/
Cursor cursor = db.query("contacts", new String[] { "_id", "name",
"telphone" }, null, null, null, null, null);
// Cursor cursor = db.rawQuery(
// "select name,telphone from contacts where _id > ?",
// new String[] { "1" });
// CursorAdapter
CursorAdapter adapter = new SimpleCursorAdapter(this,
R.layout.layout_cursor, cursor,
new String[] { "name", "telphone" }, new int[] {
R.id.name_layout_cursor, R.id.phone_layout_cursor },0);
if(lv != null){
if(adapter != null){
lv.setAdapter(adapter);
}else{
Log.v("空值", "adapter爲空");
}
}else{
Log.v("空值", "lv爲空");
}
/*
* 結果集Cursor的訪問
*/
// if (cursor.getCount() > 0) {
// cursor.moveToFirst();
// do {
// String name = cursor.getString(1);
// String telphone = cursor.getString(2);
// Log.i("提示", name+telphone);
// } while (cursor.moveToNext());
// }
}
}