Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/225.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
Android SQLIte插入null而不是所需的值_Android_Sqlite_Android Sqlite - Fatal编程技术网

Android SQLIte插入null而不是所需的值

Android SQLIte插入null而不是所需的值,android,sqlite,android-sqlite,Android,Sqlite,Android Sqlite,根据评论人问题更新: 我试图在SQLite表中插入一个值,但当我获取该值时,似乎插入了null 插入该行并获取/记录其上方所有现有行的调用如下所示: @Override public void onClick(View v) { Deck deck = new Deck(mDeckNameText.getText().toString()); dbHandler.addDeck(deck); List<Deck> allDecks = dbHandler.g

根据评论人问题更新:

我试图在SQLite表中插入一个值,但当我获取该值时,似乎插入了null

插入该行并获取/记录其上方所有现有行的调用如下所示:

@Override
public void onClick(View v) {
    Deck deck = new Deck(mDeckNameText.getText().toString());
    dbHandler.addDeck(deck);

    List<Deck> allDecks = dbHandler.getAllDecks();
    Log.d("Get Decks", "Getting all decks");

    for (Deck one_deck: allDecks){
        int deck_id = one_deck.getDeckId();
        String deck_id_string = ""+deck_id;
        Log.d("ID: ", deck_id_string);

        String deck_name = one_deck.getDeckName();
        if (deck_name != null) {
            Log.d("Name: ", deck_name);
        }
        else {
            Log.d("Name: ", "null");
        }
    }
}
其中甲板等级定义为:

public class Deck {

    int _deck_id;
    String _deck_name;

    public Deck(){
    }

    public Deck(String deck_name) {
        this._deck_name = deck_name;
    }

    public Deck(int deck_id, String deck_name) {
        this._deck_id = deck_id;
        this._deck_name = deck_name;
    }

    //get deck_id
    public int getDeckId(){
        return this._deck_id;
    }

    //set deck_id
    public void setDeckId(int deck_id){
        this._deck_id = deck_id;
    }

    //get deck name
    public String getDeckName(){
        return this._deck_name;
    }

    //set deck name
    public void setDeckName(String deck_name){
        this._deck_name = deck_name;
    }
}
包含组的表是通过以下方法创建的:

public void onCreate(SQLiteDatabase db) {
    String CREATE_DECKS_TABLE = "CREATE TABLE "+TABLE_DECKS+"("
            +KEY_DECK_ID+" INTEGER PRIMARY KEY, "+KEY_DECK_NAME
            +" TEXT"+")";

    db.execSQL(CREATE_DECKS_TABLE);
}
取牌方法如下:

void addDeck(Deck deck) {
    SQLiteDatabase db = this.getWritableDatabase();

    ContentValues values = new ContentValues();
    values.put(KEY_DECK_NAME, deck.getDeckName());

    db.insert(TABLE_DECKS,null,values);
}
//get single deck
public Deck getDeck(long deck_id) {
    SQLiteDatabase db = this.getReadableDatabase();

    String selectQuery = "SELECT * FROM " + TABLE_DECKS + " WHERE "
            + KEY_DECK_ID + " = " + deck_id;

    Log.e(LOG, selectQuery);

    Cursor c = db.rawQuery(selectQuery, null);

    if (c != null)
        c.moveToFirst();

    Deck deck = new Deck();
    deck.setDeckId(c.getInt(c.getColumnIndex(KEY_DECK_ID)));

    return deck;
}

//get all decks
public List<Deck> getAllDecks() {
    List<Deck> deck_list = new ArrayList<Deck>();
    String selectQuery = "SELECT * FROM " + TABLE_DECKS;

    Log.e(LOG, selectQuery);

    SQLiteDatabase db = this.getReadableDatabase();
    Cursor c = db.rawQuery(selectQuery, null);

    // looping through all rows and adding to list
    if (c.moveToFirst()) {
        do {
            Deck deck = new Deck();
            deck.setDeckId(c.getInt((c.getColumnIndex(KEY_DECK_ID))));

            // adding to decks
            deck_list.add(deck);
        } while (c.moveToNext());
    }

    return deck_list;
}
//获取单甲板
公共甲板(长甲板){
SQLiteDatabase db=this.getReadableDatabase();
String selectQuery=“SELECT*FROM”+表组+“WHERE”
+密钥组ID+“=”+组ID;
Log.e(Log,selectQuery);
游标c=db.rawQuery(selectQuery,null);
如果(c!=null)
c、 moveToFirst();
甲板=新甲板();
deck.setDeckId(c.getInt(c.getColumnIndex(KEY_deck_ID));
返回甲板;
}
//全副武装
公共列表getAllDecks(){
List deck_List=new ArrayList();
String selectQuery=“SELECT*FROM”+表格;
Log.e(Log,selectQuery);
SQLiteDatabase db=this.getReadableDatabase();
游标c=db.rawQuery(selectQuery,null);
//循环遍历所有行并添加到列表
if(c.moveToFirst()){
做{
甲板=新甲板();
deck.setDeckId(c.getInt((c.getColumnIndex(KEY_deck_ID)));
//添加到甲板
甲板列表。添加(甲板);
}而(c.moveToNext());
}
返回甲板清单;
}
从表中的行获取数据组ID和数据组名称时得到的日志输出如下所示(在第三次尝试插入数据组后):
身份证:﹕ 1
D/姓名:﹕ 空
身份证:﹕ 2
D/姓名:﹕ 空
身份证:﹕ 3
D/姓名:﹕ 空的

你知道为什么这个名字是空的吗


提前感谢。

您需要在获取代码中添加一行:

deck.setDeckName(c.getString((c.getColumnIndex(KEY_DECK_NAME))));
将其添加到getDeck语句的return前面

我凭记忆写作 希望能有帮助
如果是,请评分

您用于从sqlite获取数据的代码在哪里?在您的onclick中,您正在实例化一个具有空deckname的新对象deckname未实例化为mDeckNameText.getText().toString()?我还更新了问题,以包含用于从sqlite获取数据的代码。再次感谢!添加deck.setDeckNAme(c.getString((c.getColumnIndex(KEY_deck_NAME)));祝你好运,谢谢!它奏效了,我非常感谢你的帮助。我不能投票,因为我没有足够的声望点数。当我这么做的时候,我会回来投票!非常感谢。谢谢你们,按回答打分总比追加投票好