繁体   English   中英

从SQLite数据库Android获取arraylist

[英]Get arraylist from SQLite database Android

我有一个问题,当我尝试从Android中的SQLite数据库释放ArrayList中的数据时,我仅收到此消息

01-06 18:03:10.114  18254-18254/com.testdymamicalarray I/Array﹕ id:1 name:null code:null value:null country:null
01-06 18:03:10.114  18254-18254/com.testdymamicalarray I/Array﹕ id:2 name:null code:null value:null country:null
01-06 18:03:10.114  18254-18254/com.testdymamicalarray I/Array﹕ id:3 name:null code:null value:null country:null
01-06 18:03:10.114  18254-18254/com.testdymamicalarray I/Array﹕ id:4 name:null code:null value:null country:null
01-06 18:03:10.115  18254-18254/com.testdymamicalarray I/Array﹕ id:5 name:null code:null value:null country:null
01-06 18:03:10.115  18254-18254/com.testdymamicalarray I/Array﹕ id:6 name:null code:null value:null country:null

请帮助我,我哪里出错了?

我的数据库适配器

public class DataBaseAdapter  {   

Cards cards;

DataBaseHelper helper;
public DataBaseAdapter (Context context){
    helper = new DataBaseHelper(context);
}

public  long insertData(Cards cards){
    cards = new Cards();

    SQLiteDatabase db=helper.getWritableDatabase();

    ContentValues contentValues = new ContentValues();
    contentValues.put(helper.KEY_NAME, cards.getName());
    contentValues.put(helper.KEY_VALUE,cards.getValue());
    contentValues.put(helper.KEY_FORMAT,cards.getCode());
    contentValues.put(helper.KEY_COUNTRY,cards.getCountry());

    long id=db.insert(helper.TABLE_NAME,null,contentValues);
    return id;
}

public List<Cards> getData(){
    List<Cards> list = new ArrayList<>();
    SQLiteDatabase sqLiteDatabase= helper.getWritableDatabase();
    Cursor cursor= sqLiteDatabase.rawQuery(helper.QUERY,null);
    while (cursor.moveToNext()){

        int index0=cursor.getColumnIndex(helper.UID);

        int index1=cursor.getColumnIndex(helper.KEY_NAME);
        int index2=cursor.getColumnIndex(helper.KEY_VALUE);
        int index3=cursor.getColumnIndex(helper.KEY_FORMAT);
        int index4=cursor.getColumnIndex(helper.KEY_COUNTRY);

        int cid = cursor.getInt(index0);
        String name = cursor.getString(index1);
        String value = cursor.getString(index2);
        String format = cursor.getString(index3);
        String country = cursor.getString(index4);
        Cards cards = new Cards(cid,name,value,format,country);

        list.add(cards);

    }

    return list;

}

public String getAllData() {
    //select _id,Name,Card,Code

    SQLiteDatabase db = helper.getWritableDatabase();
    String[] columns = {DataBaseHelper.UID, DataBaseHelper.KEY_NAME, DataBaseHelper.KEY_VALUE, DataBaseHelper.KEY_FORMAT,DataBaseHelper.KEY_COUNTRY};
    Cursor cursor = db.query(DataBaseHelper.TABLE_NAME, columns, null, null, null, null, null);
    StringBuffer buffer = new StringBuffer();
    while (cursor.moveToNext()) {
        int index1 = cursor.getColumnIndex(helper.UID);
        int index2 = cursor.getColumnIndex(helper.KEY_NAME);
        int index3 = cursor.getColumnIndex(helper.KEY_VALUE);
        int index4 = cursor.getColumnIndex(helper.KEY_FORMAT);
        int index5 = cursor.getColumnIndex(helper.KEY_COUNTRY);

        int cid = cursor.getInt(index1);
        String name = cursor.getString(index2);
        String value = cursor.getString(index3);
        String format = cursor.getString(index4);
        String country = cursor.getString(index5);
        buffer.append(cid + " " + name + " " + value + " " + format + " " + country +"\n");
    }
    return buffer.toString();

}

static  class DataBaseHelper extends SQLiteOpenHelper {
    private final static String DATABASE_NAME = "cardsdata";
    private final static String TABLE_NAME = "CARDSTABLE";
    private final static int DATABASE_VERSION = 1;
    private final static String UID = "_id";
    private final static String KEY_NAME = "NAME";
    private final static String KEY_VALUE = "Value";
    private final static String KEY_FORMAT = "Format";
    private final static String KEY_COUNTRY = "Country";
    private final static String CREATE_TABLE = "create table "+TABLE_NAME+" ("+UID+" INTEGER PRIMARY KEY AUTOINCREMENT, "+KEY_NAME+" text not null, "+KEY_VALUE+" text not null, "+KEY_FORMAT+" text not null,"+KEY_COUNTRY+");";
    private final static String QUERY = "SELECT * FROM " +TABLE_NAME ;
    private String[] COLUMNS = {DataBaseHelper.UID,DataBaseHelper.KEY_NAME,DataBaseHelper.KEY_VALUE,DataBaseHelper.KEY_FORMAT,DataBaseHelper.KEY_COUNTRY};
    private final static String DROP_TABLE = "DROP TABLE IF EXISTS" + TABLE_NAME;
    private Context context;
    //CREATE TABLE CARDSTABLE (_id INTEGER PRIMARY KEY AUTOINCREMENT, Name VARCHAR(255));


    public DataBaseHelper(Context context) {

        super(context,TABLE_NAME, null, DATABASE_VERSION);
        this.context=context;
        Toast toast=Toast.makeText(context,"Constructor called",Toast.LENGTH_LONG);
        toast.setGravity(Gravity.CENTER, 0, 0);
        toast.show();

    }

    @Override
    public void onCreate(SQLiteDatabase db) {

        try {
            db.execSQL(CREATE_TABLE);
            Toast toast=Toast.makeText(context,"Success",Toast.LENGTH_LONG);
            toast.setGravity(Gravity.CENTER, 0, 0);
            toast.show();
        } catch (SQLException e) {

            Toast toast=Toast.makeText(context,""+e,Toast.LENGTH_LONG);
            toast.setGravity(Gravity.CENTER, 0, 0);
            toast.show();
        }

    }

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

        try {
            db.execSQL(DROP_TABLE);
            onCreate(db);
            Toast toast=Toast.makeText(context,"Upgrage success",Toast.LENGTH_LONG);
            toast.setGravity(Gravity.CENTER, 0, 0);
            toast.show();
        } catch (SQLException e) {
            Toast toast=Toast.makeText(context,""+e,Toast.LENGTH_LONG);
            toast.setGravity(Gravity.CENTER, 0, 0);
            toast.show();
        }
    }
}
}

吸气和塞特卡类:

public class Cards {

int id;
String name;
String code;
String value;
String country;

public Cards(int id, String name, String code, String value,String country) {
    this.id = id;
    this.name = name;
    this.code = code;
    this.value = value;
    this.country = country;
}

public String getValue() {
    return value;
}

public void setValue(String value) {
    this.value = value;
}

public Cards(String name, String code, String value , String country) {
    this.name = name;
    this.code = code;
    this.value = value;
    this.country = country;
}

public Cards() {

}

public int getId() {
    return id;
}

public void setId(int id) {
    this.id = id;
}

public String getName() {
    return name;
}

public void setName(String name) {
    this.name = name;
}

public String getCode() {
    return code;
}

public void setCode(String code) {
    this.code = code;
}

public String getCountry() {
    return country;
}

public void setCountry(String country) {
    this.country = country;
}

@Override
public String toString() {
    return String.format("id:%d name:%s code:%s value:%s country:%s",
            id, name, code, value, country);
}
}

MainActivity中,我从EditText获取文本:

String name=cardName.getText().toString();
    String value=cardValue.getText().toString();
    String format=cardFormat.getText().toString();
    String country=cardCountry.getText().toString();

    long id=dataBaseAdapter.insertData(new Cards(name,value,format,country));

编辑:

当我更改我的方法insertData时开始起作用:

public  long insertData(String name, String value, String format , String country){


    SQLiteDatabase db=helper.getWritableDatabase();

    ContentValues contentValues = new ContentValues();
    contentValues.put(helper.KEY_NAME, name);
    contentValues.put(helper.KEY_VALUE,value);
    contentValues.put(helper.KEY_FORMAT,format);
    contentValues.put(helper.KEY_COUNTRY,country);

    long id=db.insert(helper.TABLE_NAME,null,contentValues);
    return id;
}

我删除了使用Cards类,现在一切正常:

01-06 18:42:44.757  27317-27317/com.testdymamicalarray I/Array﹕ id:1 name:s code:d value:s country:s
01-06 18:42:44.757  27317-27317/com.testdymamicalarray I/Array﹕ id:2 name:dddf code:dfg value:ffgg country:fggg

但是我仍然不明白为什么insert不适合我的getter和setter类Cards ,您有什么想法吗?

cards = new Cards();

这将使用默认值构造一个新的Cards对象。 null是对象引用(例如String )的默认值。

SQLiteDatabase db=helper.getWritableDatabase();

ContentValues contentValues = new ContentValues();
contentValues.put(helper.KEY_NAME, cards.getName());
contentValues.put(helper.KEY_VALUE,cards.getValue());
contentValues.put(helper.KEY_FORMAT,cards.getCode());
contentValues.put(helper.KEY_COUNTRY,cards.getCountry());

long id=db.insert(helper.TABLE_NAME,null,contentValues);
return id;

在这里,您将默认的空值存储到数据库中并捕获自动生成的ID。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM