String继续调用NullPointerException,不知道它从

时间:2016-01-04 23:49:19

标签: java android sqlite nullpointerexception

当我第一次运行应用程序遇到此问题时,我正在学习实现SQLite数据库的教程。

java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String com.example.montymason.sqlitedatabaseproject.MyDBHandler.databaseToString()' on a null object reference

我不确定这个空指针引用来自何处。下面是我的主要活动的代码,以及它在数据库处理程序类中调用的函数。

非常感谢任何有关决议的帮助。

主要活动显示功能代码:

import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.TextView;

public class MainActivity extends AppCompatActivity {
// Database Helper
MyDBHandler db;

// TextView
TextView database_contents;

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

    displayItems();
}

// New entry button.
public void addNewItem_butt(View v){
    Intent addnewItem = new Intent(MainActivity.this, addItem.class);
    startActivity(addnewItem);
}

public void displayItems(){
    String dbItems;
    dbItems = db.databaseToString();

    if(dbItems != null){
        database_contents.setText(dbItems);
    }
    else{
        database_contents.setText("No items to display.");
    }
}}

将结果返回主活动的数据库处理程序类的代码:

public String databaseToString(){
    String displayItem = "";

    SQLiteDatabase db = getWritableDatabase();
    String query = "SELECT * FROM " + TABLE_NAME + "WHERE 1";

    // Cursor
    Cursor readDB = db.rawQuery(query, null);

    readDB.moveToFirst();

    while(!readDB.isAfterLast()){
        if(readDB.getString(readDB.getColumnIndex("productname")) != null){
            displayItem += "Product Name - " + readDB.getString(readDB.getColumnIndex("productname")) +
                    "\nProduct Color - " + readDB.getString(readDB.getColumnIndex("productcolor"));

            displayItem += "\n";
        }
        else{
            displayItem += "No items to display.";
        }
    }
    db.close();
    return displayItem;
}

1 个答案:

答案 0 :(得分:2)

问题出在

dbItems = db.databaseToString();

确保您在db中提取数据。

如果有可能它将为null,请使用null检查器包装它。

if (db != null){
    dbItems = db.databaseToString();
    //then all your related code
}