Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/232.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xslt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在我尝试将项目插入数据库后,我的应用程序崩溃_Java_Android_Database_Listview_Nullpointerexception - Fatal编程技术网

Java 在我尝试将项目插入数据库后,我的应用程序崩溃

Java 在我尝试将项目插入数据库后,我的应用程序崩溃,java,android,database,listview,nullpointerexception,Java,Android,Database,Listview,Nullpointerexception,我可以打开我的Datenbase,但如果我试图插入一个项目,我的应用程序就会崩溃。 仅将项目插入到我的ListView工作 我在另一个活动中创建一个新对象,并在意图中获取值。 但当我启动intent并返回到主/列表页面活动时,我的应用程序崩溃。如果没有数据库,应用程序将运行 以下是我的代码:recepltListAdapter.java: public class ReceptListDatabase { private static final String DATABASE_NAME =

我可以打开我的Datenbase,但如果我试图插入一个项目,我的应用程序就会崩溃。 仅将项目插入到我的ListView工作

我在另一个活动中创建一个新对象,并在意图中获取值。 但当我启动intent并返回到主/列表页面活动时,我的应用程序崩溃。如果没有数据库,应用程序将运行

以下是我的代码:recepltListAdapter.java:

public class ReceptListDatabase {

private static final String DATABASE_NAME = "receptlist.db";
private static final int DATABASE_VERSION = 1;

private static final String DATABASE_TABLE = "receptlistitems";

public static final String KEY_ID = "_id";
public static final String KEY_NAME = "name";
public static final String KEY_KATEGORY = "kategory";
public static final String KEY_INGREDIENTS = "ingredients";
public static final String KEY_DIRECTIONS = "ingredients";


public static final int COLUMN_NAME_INDEX = 1;
public static final int COLUMN_KATEGORY_INDEX = 2;
public static final int COLUMN_INGREDIENTS_INDEX = 3;
public static final int COLUMN_DIRECTIONS_INDEX = 4;

private ReceptDBOpenHelper dbHelper;

private SQLiteDatabase DB;

public ReceptListDatabase(Context context) {
    dbHelper = new ReceptDBOpenHelper(context, DATABASE_NAME, null,
            DATABASE_VERSION);
}

public void open() throws SQLException {
    try {
        db = dbHelper.getWritableDatabase();
    } catch (SQLException e) {
        db = dbHelper.getReadableDatabase();
    }
}

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

public long insertReceptItem(ListItem item) {
    ContentValues itemValues = new ContentValues();
    itemValues.put(KEY_NAME, item.getName());
    itemValues.put(KEY_KATEGORY,item.getKategory());
    itemValues.put(KEY_INGREDIENTS, item.getIngredients());
    itemValues.put(KEY_DIRECTIONS, item.getDirection());
    return db.insert(DATABASE_TABLE, null, itemValues);
}

public void removeReceptItem(ListItem item) {

    String toDelete = KEY_NAME + "=?";
    String[] deleteArguments = new String[]{item.getName()};
    db.delete(DATABASE_TABLE, toDelete, deleteArguments);

}

public ArrayList<ListItem> getAllReceptItems() {
    ArrayList<ListItem> items = new ArrayList<ListItem>();
    Cursor cursor = db.query(DATABASE_TABLE, new String[] { KEY_ID,
            KEY_NAME, KEY_KATEGORY, KEY_INGREDIENTS, KEY_DIRECTIONS, null}, null, null, null, null, null);
    if (cursor.moveToFirst()) {
        do {
            String name = cursor.getString(COLUMN_NAME_INDEX);
            String kategory = cursor.getString(COLUMN_KATEGORY_INDEX);
            String ingredients = cursor.getString(COLUMN_INGREDIENTS_INDEX);
            String directions = cursor.getString(COLUMN_DIRECTIONS_INDEX);

            items.add(new ListItem(name, kategory, ingredients, directions, null));

        } while (cursor.moveToNext());
    }
    return items;
}

private class ReceptDBOpenHelper extends SQLiteOpenHelper {
    private static final String DATABASE_CREATE = "create table "
            + DATABASE_TABLE + " (" + KEY_ID
            + " integer primary key autoincrement, " + KEY_NAME
            + " text not null, " + KEY_KATEGORY
            + " text, " + KEY_INGREDIENTS
            + " text not null, " + KEY_DIRECTIONS
            + " text not null);";


        public ReceptDBOpenHelper(Context c, String dbname,
                            SQLiteDatabase.CursorFactory factory, int version) {
        super(c, dbname, factory, version);
    }

    @Override
    public void onCreate(SQLiteDatabase db) {
        db.execSQL(DATABASE_CREATE);
    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {

    }
}

活动
onCreate
中,在调用
setupDatabase()
之前,您正在调用
addObject()
。仅在
setupDatabase()
内,您正在初始化
receptDB
实例

但是您正在访问
receptDb
内部的
addObject()
方法

receptDB.insertReceptItem(newObject);
因此在此期间,您的
receptDB
具有空引用,因此您将获得
NullPointerException

把下面两行从

addObject();
setupDatabase();
为此:

setupDatabase();
addObject();

请把你的失事日志贴出来。哦,我太蠢了。。非常感谢。
addObject();
setupDatabase();
setupDatabase();
addObject();