java - String 不断调用 NullPointerException,不确定它从哪里获取

标签 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

我不确定这个空指针引用来自哪里。下面是我的主要 Activity 及其在数据库处理程序类中调用的函数的代码。

任何有助于解决问题的帮助将不胜感激。

主要 Activity 显示功能代码:

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.");
    }
}}

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

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;
}

最佳答案

问题出在行

dbItems = db.databaseToString();

确保您正在数据库中提取数据。

如果有可能为空,则用空检查器将其包装起来。

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

关于java - String 不断调用 NullPointerException,不确定它从哪里获取,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34601939/

相关文章:

java - 绑定(bind)服务的多个实例 - 绑定(bind)服务在应用程序结束后仍然存在

java - 为什么对于大量数据,函数式比命令式快,而对于少量数据,函数式比命令式慢?

java - 获取共享首选项并将它们显示在 ListView 中

database - 比较 Oracle、Postgres 和 SQLite 中的 CLOB、BLOB 值

Android SQLite 图像存储

java - 如何终止 SwingWorker?

java - OS X Mavericks JNI CallStaticVoidMethod 结果为 SIGSEGV/SIGBUS (Java 8)

java - 如何将阿拉伯文本打印到热敏打印机 (Bixolon)

android - Android 上的文件上次访问时间

Windows 上的 PHP5.4,带有 sqlite 但没有 Apache 和 MySQL