2015-02-13 8 views
0

У меня есть проблема, когда я пытаюсь сделать disllay данных в ArrayList из моего SQLite базы данных в Android я Получать только этоПолучить ArrayList из базы данных SQLite Android

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 

пожалуйста, помогите мне, где я должен сделать ошибку?

Мой DataBaseAdapter:

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(); 
     } 
    } 
} 
} 

Getter и Setter класс карты:

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)); 

EDIT:

Когда я изменить мой метод 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; 
} 

я удалить с помощью класса карты, и теперь его все в порядке:

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 

Но я все еще не понимаю, почему вставка не w orks с моим геттером & setter class Открытки, есть ли у вас какие-либо идеи?

+0

Примечание: перед использованием курсора напишите: cursor.moveToFirst(); –

+0

Возможно, вы сохраняете нули в базе данных и получаете их обратно. Используйте отладчик, чтобы узнать. – laalto

+0

@greta 'moveToNext()' работает также. – laalto

ответ

1
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; 

Здесь вы храните нулевые значения по умолчанию в базе данных и захватываете автогенерированный идентификатор.

+0

, поэтому мне нужно просто удалить эту строку? – Ololoking

+0

спасибо, что он отлично работает – Ololoking

Смежные вопросы