android - 单击按钮后出现空指针异常(SQLite 数据库)

标签 android sqlite nullpointerexception

<分区>

当我单击确认按钮将数据保存到 sqlite 数据库时,我得到一个空指针异常并且我的应用程序关闭。我真的不知道这里出了什么问题......

public class Morfologia extends Activity {

     DatabaseAdapter dbAdapter2;


    private EditText editTextHem;

    private Button button10;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_morfologia);

        editTextHem = (EditText) findViewById(R.id.editText1_hemoglobina);
        button10 = (Button) findViewById(R.id.button1_morfologia);
        button10.setOnClickListener(l2);

    }

    private OnClickListener l2 = new OnClickListener() {

        @Override
        public void onClick(View v) {
            if (v.getId() == R.id.button1_morfologia){
                saveToDB();
            }

        }
    };


    public void saveToDB() {

        String hemoglobina = editTextHem.getText().toString();
        Log.d("text: ", hemoglobina);

        dbAdapter2.open();
        dbAdapter2.insertMorphologyData(hemoglobina);
        dbAdapter2.close();
    }}

洛卡特:

11-04 10:49:37.734: D/text:(21197): 123
11-04 10:49:37.734: D/AndroidRuntime(21197): Shutting down VM
11-04 10:49:37.734: W/dalvikvm(21197): threadid=1: thread exiting with uncaught exception (group=0x416ced40)
11-04 10:49:37.736: E/AndroidRuntime(21197): FATAL EXCEPTION: main
11-04 10:49:37.736: E/AndroidRuntime(21197): Process: com.example.bmicalculator, PID: 21197
11-04 10:49:37.736: E/AndroidRuntime(21197): java.lang.NullPointerException
11-04 10:49:37.736: E/AndroidRuntime(21197):    at com.example.bmicalculator.Morfologia.saveToDB(Morfologia.java:54)
11-04 10:49:37.736: E/AndroidRuntime(21197):    at com.example.bmicalculator.Morfologia$1.onClick(Morfologia.java:42)
11-04 10:49:37.736: E/AndroidRuntime(21197):    at android.view.View.performClick(View.java:4456)
11-04 10:49:37.736: E/AndroidRuntime(21197):    at android.view.View$PerformClick.run(View.java:18465)
11-04 10:49:37.736: E/AndroidRuntime(21197):    at android.os.Handler.handleCallback(Handler.java:733)
11-04 10:49:37.736: E/AndroidRuntime(21197):    at android.os.Handler.dispatchMessage(Handler.java:95)
11-04 10:49:37.736: E/AndroidRuntime(21197):    at android.os.Looper.loop(Looper.java:136)
11-04 10:49:37.736: E/AndroidRuntime(21197):    at android.app.ActivityThread.main(ActivityThread.java:5086)
11-04 10:49:37.736: E/AndroidRuntime(21197):    at java.lang.reflect.Method.invokeNative(Native Method)
11-04 10:49:37.736: E/AndroidRuntime(21197):    at java.lang.reflect.Method.invoke(Method.java:515)
11-04 10:49:37.736: E/AndroidRuntime(21197):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:785)
11-04 10:49:37.736: E/AndroidRuntime(21197):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601)
11-04 10:49:37.736: E/AndroidRuntime(21197):    at dalvik.system.NativeStart.main(Native Method)

使用 saveToDB 方法类:

package com.example.bmicalculator.database;



public class DatabaseAdapter {

    SQLiteDatabase database;
    DatabaseOpenHelper dbHelper;

    public DatabaseAdapter(Context context) {
        dbHelper = new DatabaseOpenHelper(context);
    }

    public void open() {
        database = dbHelper.getWritableDatabase();
    }

    public void close() {
        database.close();
    }




    public void insertMorphologyData(String hemoglobina){
        ContentValues values2 = new ContentValues();
        values2.put("hemoglobina", hemoglobina);
        database.insert("morfologia_krwi2", null, values2);
    }



}

类创建表:

public class DatabaseOpenHelper extends SQLiteOpenHelper {

    public static final String dbName = "baza";


    public static final String  morphologyTableName = "morfologia_krwi2";

    public static final String createTableMorphology = "CREATE TABLE " + morphologyTableName + 
            "(id INTEGER PRIMARY KEY AUTOINCREMENT," +
            "hemoglobina TEXT);";


    public DatabaseOpenHelper(Context context) {
        super(context, dbName, null, 1);
        // TODO Auto-generated constructor stub
    }


    @Override
    public void onCreate(SQLiteDatabase database) {
        // TODO Auto-generated method stub
        database.execSQL(createTableMorphology);


    }


    @Override
    public void onUpgrade(SQLiteDatabase database, int oldVersion, int newVersion) {
        // TODO Auto-generated method stub

    }



}

最佳答案

您只声明了您的 dbadapter2 但从未初始化它。

使用

dbadapter2 = new DatabaseAdapter(this);

初始化它,其中 this 例如你的 Activity 是一个 Context

关于android - 单击按钮后出现空指针异常(SQLite 数据库),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26732246/

相关文章:

iphone - 来自 SQLite 的 bool 值总是返回 0

java - 什么是NullPointerException,我该如何解决?

Android TCP读取几行

android - 如何访问 Volley 中错误响应的内容?

sqlite - 我如何区分 2 个 SQLite 文件?

android - 更改 ListView 项的文本颜色时出现 NullPointerException

android - Fragment 的 oncreateView() 中的 NullPointerException

java - 位图在android中总是返回null

android - 如何在特定时间内填充进度条?

Python & SQLite3 从两个表中选择