Ich versuche, SQLite zu verwenden, um Daten für eine Listview zu erhalten und zu setzen. Meine Liste muss Anfangsdaten haben und der Benutzer muss sie bearbeiten können.Wie man Daten mit SQLite in Android erhält und schreibt
Ich habe ein Item-Klasse
public final class Items implements BaseColumns {
public static final String TABLE_NAME = "items";
public static final String COLUMN_NAME_TYPE= "itemType";
public static final String COLUMN_NAME_NAME = "itemName";
public static final String COLUMN_NAME_CALORIE = "calorie";
private long id = -1;
private String name;
private String type;
private int calorie;
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
public Items(String type,String name, int score) {
this.name = name;
this.type=type;
this.calorie = calorie;
}
public String getName() {
return name;
}
public int getCalorie() {
return calorie;
}
public void setName(String name) {
this.name = name;
}
public void setId(long id) {
this.id = id;
}
public void setCalorie(int calorie) {
this.calorie = calorie;
}
public long getId() {
return id;
}
public String toString() {
StringBuilder builder = new StringBuilder();
builder.append("Item [id=");
builder.append(id);
builder.append(", name=");
builder.append(name);
builder.append(", calorie=");
builder.append(calorie);
builder.append("]");
return builder.toString();
}
}
Dann eine DB-Hilfsklasse I erstellt, die alle Methoden, die ich brauche. (Beachten Sie, dass es eine chaotische Klasse ist. Während ich habe Schwierigkeiten für Datenbank immer Daten, die ich viele Dinge geändert.)
public class DatabaseHelper extends SQLiteOpenHelper {
private static final String DB_NAME = "items.db";
private static final int DB_VERSION = 1;
public DatabaseHelper(Context context) {
super(context, DB_NAME, null, DB_VERSION);
}
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL("CREATE TABLE " + Items.TABLE_NAME + " ("
+ Items._ID + " INTEGER PRIMARY KEY AUTOINCREMENT,"
+ Items.COLUMN_NAME_TYPE + " TEXT,"
+ Items.COLUMN_NAME_NAME + " TEXT,"
+ Items.COLUMN_NAME_CALORIE + " INTEGER" + ");");
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
db.execSQL("DROP TABLE IF EXISTS " + Items.TABLE_NAME);
onCreate(db);
}
public void createItem(Items item) {
SQLiteDatabase db = this.getWritableDatabase();
ContentValues values = new ContentValues();
values.put(Items.COLUMN_NAME_NAME, item.getName());
values.put(Items.COLUMN_NAME_TYPE, item.getName());
values.put(Items.COLUMN_NAME_CALORIE, item.getCalorie());
item.setId(db.insert(Items.TABLE_NAME, null, values));
db.close();
}
public Cursor getItemsTypeOf(String type){
SQLiteDatabase db = this.getWritableDatabase();
String[] tableColumn=new String[]{Items.COLUMN_NAME_TYPE, Items.COLUMN_NAME_NAME, Items.COLUMN_NAME_CALORIE};
String whereClause= Items.COLUMN_NAME_TYPE+"="+type;
// +" FROM "+Items.TABLE_NAME
// +"WHERE "+Items.COLUMN_NAME_TYPE+"="+type;
Cursor cur=db.query(Items.TABLE_NAME,tableColumn,whereClause,null,null,null,null);
return cur;
}
public Cursor fetchAllItems() {
SQLiteDatabase db = this.getReadableDatabase();
Cursor cur= db.query(Items.TABLE_NAME, new String[]{
Items.COLUMN_NAME_TYPE, Items.COLUMN_NAME_NAME, Items.COLUMN_NAME_CALORIE,
}, null, null, null, null,
Items.COLUMN_NAME_CALORIE + " DESC");
db.close();
return cur;
}
public Items getItem(long id){
SQLiteDatabase db = this.getReadableDatabase();
Cursor cursor =
db.query(Items.TABLE_NAME,
null,
Items._ID+ "=?",
new String[] { String.valueOf(id) },
null,
null,
null);
if(cursor!=null&&cursor.moveToFirst()) {
Items item = new Items(cursor.getString(1), cursor.getString(2),
cursor.getInt(3));
item.setId(cursor.getLong(0));
cursor.close();
db.close();;
return item;
}
cursor.close();
db.close();;
return null;
}
}
Also meine Anwendungskategorien bei mainActivity haben als jede Kategorie abgestimmt Daten analysieren werden und zeigen ein Liste davon. Hier
ist MainActivity
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
DatabaseHelper dbHelper = new DatabaseHelper(this);
dbHelper.createItem(new Items("Breakfast","egg",23));
}
public void onBreakfastSelected(View view) {
startActivity(new Intent(this, ListActivity.class));
}
}
Und andere Liste Klasse, die Elemente der Kategorie zeigt.
public class ListActivity extends Activity implements AdapterView.OnItemClickListener {
ArrayAdapter<String> adapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_list);
ListView list = (ListView) findViewById(R.id.listView);
list.setOnItemClickListener(this);
DatabaseHelper dbHelper = new DatabaseHelper(this);
dbHelper.createItem(new Items("a", "a", 12));
Items item=dbHelper.getItem(-1);
//System.out.print();
adapter.add(item.getName());
list.setAdapter(adapter);
}
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
}
}
Ich kann keine Daten erhalten, die ich eingefügt habe. Es gibt mir einen Fehler, wenn ich versuchte, getItem-Methode zu verwenden. Außerdem weiß ich nicht, wie man Cursor in verschiedene Daten trennt, um sie zu Listen zu analysieren, nachdem ich den Cursor in der Methode getItemsTypeOf gefunden habe.
Welche Fehler bekommen Sie eigentlich? –