当我第一次运行应用程序遇到此问题时,我正在学习实现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;
}
答案 0 :(得分:2)
问题出在
行dbItems = db.databaseToString();
确保您在db中提取数据。
如果有可能它将为null,请使用null检查器包装它。
if (db != null){
dbItems = db.databaseToString();
//then all your related code
}