Android SQLiteDatabase返回null(空白)行
一直在用我正在尝试构建的应用程序拉我的头发。我已经尝试了很多不同的东西,书籍,方式,YouTube教程,我已经失去了计数!我正在构建一个显示飞机图片的简单应用程序,然后用户点击将其添加到学习列表(通过使用烤面包而不是列表视图进行验证),然后单击另一个按钮查看此列表。Android SQLiteDatabase返回null(空白)行
我有应用程序返回正确的行数,但它们都是空白的!从我读到的这意味着行是空的,但我不能为我的生活找出什么是错的!我会永远在谁的帮助下的债务:)
谢谢!下面的代码...
(数据库帮手/适配器)
package com.atcapp;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.SQLException;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.util.Log;
public class DatabaseAdapter {
public static final String KEY_ROWID = "_id";
public static final String KEY_NAME = "name";
private static final String TAG = "DatabaseAdapter";
private static final String DATABASE_NAME = "LearntListdb";
private static final String DATABASE_TABLE = "AircraftTable";
private static final int DATABASE_VERSION = 1;
private static final String DATABASE_CREATE = "create table AircraftTable (_id integer primary key autoincrement, "
+ "name text not null);";
private final Context context;
private DatabaseHelper DBHelper;
private SQLiteDatabase db;
public DatabaseAdapter(Context ctx) {
this.context = ctx;
DBHelper = new DatabaseHelper(context);
}
private static class DatabaseHelper extends SQLiteOpenHelper {
public DatabaseHelper(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
}
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL(DATABASE_CREATE);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
Log.w(TAG, "Upgrading database from version " + oldVersion + " to "
+ newVersion + "which will destroy all old data");
db.execSQL("DROP TABLE IF EXISTS AircraftNames");
onCreate(db);
}
}
// ---opens the database---
public DatabaseAdapter open() throws SQLException {
db = DBHelper.getWritableDatabase();
return this;
}
// ---closes the database---
public void close() {
DBHelper.close();
}
// ---insert an aircraft into the database---
public long insertAircraft(String name) {
ContentValues initialValues = new ContentValues();
initialValues.put(KEY_NAME, name);
return db.insert(DATABASE_TABLE, null, initialValues);
}
// ---retrieves all the list---
public Cursor getAllAircraft() {
Cursor c = db.query(DATABASE_TABLE, new String[] {"_id", "name"}, null, null, null, null, null);
return c;
}
}
(活动目录)
package com.atcapp;
import android.app.ListActivity;
import android.database.Cursor;
import android.os.Bundle;
import android.widget.SimpleCursorAdapter;
public class DataView extends ListActivity {
private DatabaseAdapter mDbHelper;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.aircraftlist);
mDbHelper = new DatabaseAdapter(this);
mDbHelper.open();
fillData();
}
private void fillData(){
Cursor c = mDbHelper.getAllAircraft();
startManagingCursor(c);
String[] from = new String[] {DatabaseAdapter.KEY_ROWID, DatabaseAdapter.KEY_NAME};
int[] to = new int[] {android.R.id.list};
SimpleCursorAdapter myList =
new SimpleCursorAdapter(this, R.layout.list_row, c, from, to);
setListAdapter(myList);
}
}
您需要提供TextView的IDS在你的数组中。您需要将光标中的数据映射到适配器中的视图。
查看你的list_row布局,并从那里使用textview编号。
嗨巴拉克,感谢您的快速回复。我编辑了这样的数组: String [] from = new String [] {c.toString()}; \t \t int [] to = new int [] {R.id.listrow}; 现在我得到这个错误: 4-11 22:25:46.830:E/AndroidRuntime(1601):java.lang.RuntimeException:无法启动活动ComponentInfo {com.atcapp/com.atcapp.DataView} :java.lang.IllegalArgumentException:列'[email protected]'不存在 我已经尝试清理/重建代码没有效果。谢谢! – cptasker 2012-04-11 21:24:11
不,不,不。你阵列很好。你需要改变你的阵列。 int [] to = new int [] {R.id.yourtextview} ...其中youtextview实际上是您正在使用的R.layout.list_row布局中定义的textview。 – Barak 2012-04-11 21:32:23
非常感谢。作为参考,最终的代码是: String [] from = new String [] {DatabaseAdapter.KEY_NAME}; \t \t int [] to = new int [] {R.id.listrow}; 所有的工作,巴拉克是我的英雄:) – cptasker 2012-04-11 21:35:59
如果我的答案帮助你,请帮助我们,并将其标记为已接受的答案(点击旁边的小复选标记)。这样它就不会显示在没有答案的列表上,每个人都知道你的问题已经解决,他们可以跳过它。 – Barak 2012-04-11 21:29:57