尝试将数据保存到SQlite时出现问题

时间:2016-06-20 15:50:07

标签: java android sqlite

由于这是我的第二个应用程序,而我的第一个应用程序是99%的设计,这可能是重复的,因为我可能没有使用适当的关键字进行搜索,但我现在正在搜索3小时解决方案,这可能非常简单,我似乎无法找到它。

当我尝试使用2个TextViews,1个Spinner和一个Button将信息保存到我的数据库时,我收到以下错误消息:

FATAL EXCEPTION: main
                                                                   Process: nl.pluuk.gelduren, PID: 29876
                                                                   java.lang.NullPointerException: Attempt to invoke virtual method 'android.database.sqlite.SQLiteDatabase android.content.Context.openOrCreateDatabase(java.lang.String, int, android.database.sqlite.SQLiteDatabase$CursorFactory, android.database.DatabaseErrorHandler)' on a null object reference
                                                                       at android.database.sqlite.SQLiteOpenHelper.getDatabaseLocked(SQLiteOpenHelper.java:223)
                                                                       at android.database.sqlite.SQLiteOpenHelper.getWritableDatabase(SQLiteOpenHelper.java:163)
                                                                       at nl.pluuk.gelduren.Add_client.saveData(Add_client.java:76)
                                                                       at nl.pluuk.gelduren.Add_client$3.onClick(Add_client.java:67)
                                                                       at android.view.View.performClick(View.java:5233)
                                                                       at android.view.View$PerformClick.run(View.java:21209)
                                                                       at android.os.Handler.handleCallback(Handler.java:739)
                                                                       at android.os.Handler.dispatchMessage(Handler.java:95)
                                                                       at android.os.Looper.loop(Looper.java:152)
                                                                       at android.app.ActivityThread.main(ActivityThread.java:5497)
                                                                       at java.lang.reflect.Method.invoke(Native Method)
                                                                       at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
                                                                       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)

这是我目前使用的不保存任何数据的代码

public void save(){
        save = (Button)findViewById(R.id.button_save_client);
        save.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                System.out.println("Save Button Clicked");
                Client_textView = (TextView)findViewById(R.id.inputform_client_name);
                Rate_textView = (TextView)findViewById(R.id.inputform_rate);
                Pay_Period_textView = (Spinner)findViewById(R.id.spinner_pay_period);
                Client = "" + Client_textView.getText();
                Rate = Integer.parseInt("" + Rate_textView.getText());
                Pay_Period = "" + Pay_Period_textView.getSelectedItem();

                saveData();
            }
        });
    }



    public void saveData(){
        // Gets the data repository in write mode
        SQLiteDatabase db = mDbHelper.getWritableDatabase();

// Create a new map of values, where column names are the keys
        ContentValues values = new ContentValues();
        values.put(FeedReaderContract.FeedEntry.COLUMN_NAME_CLIENT_NAME, Client);
        System.out.println("Yes, i'm in your log");
        values.put(FeedReaderContract.FeedEntry.COLUMN_NAME_RATE, Rate);
        values.put(FeedReaderContract.FeedEntry.COLUMN_NAME_PAY_PERIOD, Pay_Period);

// Insert the new row, returning the primary key value of the new row
        long newRowId;
        newRowId = db.insert(
                FeedReaderContract.FeedEntry.TABLE_NAME,
                null,
                values);
    }

此代码全部在Add_client中。 Add_client.java:76错误是指行:SQLiteDatabase db = mDbHelper.getWritableDatabase(); Add_client.java:67错误指的是:saveData(); 这可能是由第76行造成的。

我通过执行System.out.println("Column count:" + c.getColumnCount());

确保数据库中有列

这告诉我那里有3列,这正是我所期待的。 我还检查了列中是否有任何数据:

Boolean rowExists;
        if (c.moveToFirst())
        {
            System.out.println(c.getColumnName(0));
            rowExists = true;

        } else
        {
            System.out.println("Nothing to see here");
            rowExists = false;
        }

这给了我输出:这里没什么可看的,因为数据库开始是空的,所以也在期待。

我的代码中哪些错误一直在粉碎我这些错误?

是否需要任何其他信息,我很乐意将其包含在编辑中。

1 个答案:

答案 0 :(得分:2)

您传递给SQliteOpenHelper的上下文(在本例中为mDBHelper)似乎为null。