现在的位置: 首页 > 移动开发 > 正文

【Android 排错第一例】NullPointException

2019年06月03日 移动开发 ⁄ 共 2015字 ⁄ 字号 评论关闭

排错经验:不要因为某个变量简单熟悉就忽略对该值的检查,由此体现代码的健壮的重要性。
报错: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());
//      }
    }
}

抱歉!评论已关闭.