【Android 排錯第一例】NullPointException

排錯經驗:不要因爲某個變量簡單熟悉就忽略對該值的檢查,由此體現代碼的健壯的重要性。
報錯: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());
//      }
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章