有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java SQLitedatabase Update函数找不到行ID?

当用户点击使用游戏货币时,我试图更新用户的“现金堆栈”。到目前为止,我发现用户的ID应该是6,但是当我试图在数据库更新函数中使用这个硬编码的值时,我得到了一个null对象引用错误。有人能帮我理解为什么这个值不正确吗?我在安卓工作室工作,使用SQLite

正在使用的函数:public void updateCashStack(int newCashStack){..}(见下文),fiveDollar.setOnClickListener(..)

我如何找到身份证号码:

int lastID = 0;
for (int i = 0; i < 10; i++) {
    if(userIDs[i] != 0) {
        lastID = userIDs[i];
        Toast.makeText(ChoosePokerStyle.this, "User ID = " + lastID, Toast.LENGTH_LONG).show( );
    }
}

运行应用程序时显示的内容:
https://i.stack.imgur.com/8f0yl.jpg

数据库代码:

public static final String DATABASE_NAME = "rockfinn.db";
private SQLiteDatabase db;
public static final String TABLE_NAME = "user_data";
public static final String COL1 = "ID";
public static final String COL2 = "NICKNAME";
public static final String COL3 = "CASHSTACK";

public DatabaseHelper(Context context) {super(context, DATABASE_NAME, null, 1);}

@Override
public void onCreate(SQLiteDatabase db) {
    String createTable = "CREATE TABLE " + TABLE_NAME + " (ID INTEGER PRIMARY KEY AUTOINCREMENT, " +
            "NICKNAME TEXT, " +
            "CASHSTACK INT)";
    db.execSQL(createTable);
}

@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
    db.execSQL("DROP TABLE IF EXISTS " + TABLE_NAME);
}

public boolean addData(String nickname) {
    SQLiteDatabase db = this.getWritableDatabase();
    ContentValues contentValues = new ContentValues();
    contentValues.put(COL2, nickname);
    contentValues.put(COL3, 1000);

    long result = db.insert(TABLE_NAME, null, contentValues);

    if(result == -1) {
        return false;
    }
    else {
        return true;
    }
}

public void updateCashStack(int newCashStack)
{
    try
    {
        ContentValues values = new ContentValues();
        values.put(COL3, newCashStack);
        String whereClause = "id = ?";
        db.update(TABLE_NAME, values, whereClause, new String[] {"6"});
        //db.setTransactionSuccessful();
    }
    catch (Exception e)
    {
        Log.e("Error in transaction", "Error", e);
    }
    finally
    {
      // db.endTransaction();
    }
}

public Cursor getListContents() {
    SQLiteDatabase db = this.getWritableDatabase();
    Cursor data = db.rawQuery("SELECT * FROM " + TABLE_NAME, null);
    return data;
}

}

fiveDollar.setOnClickListener代码:

fiveDollar.setOnClickListener(new View.OnClickListener( ) {
    @Override
    public void onClick(View v)
    {
       int five = 5;
       int cashStackAsInt = Integer.parseInt(cashStack);
       cashStackAsInt = cashStackAsInt - five;
       userCashStackPrompt.setText(Integer.toString(cashStackAsInt));
       myDB.updateCashStack(cashStackAsInt);
       Toast.makeText(ChoosePokerStyle.this, "You have bet $5", Toast.LENGTH_LONG).show( );
    }
}

共 (0) 个答案