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

} 

}

+0

如果我的答案帮助你,请帮助我们,并将其标记为已接受的答案(点击旁边的小复选标记)。这样它就不会显示在没有答案的列表上,每个人都知道你的问题已经解决,他们可以跳过它。 – Barak 2012-04-11 21:29:57

您需要提供TextView的IDS在你的数组中。您需要将光标中的数据映射到适配器中的视图。

查看你的list_row布局,并从那里使用textview编号。

+0

嗨巴拉克,感谢您的快速回复。我编辑了这样的数组: 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

+0

不,不,不。你阵列很好。你需要改变你的阵列。 int [] to = new int [] {R.id.yourtextview} ...其中youtextview实际上是您正在使用的R.layout.list_row布局中定义的textview。 – Barak 2012-04-11 21:32:23

+0

非常感谢。作为参考,最终的代码是: String [] from = new String [] {DatabaseAdapter.KEY_NAME}; \t \t int [] to = new int [] {R.id.listrow}; 所有的工作,巴拉克是我的英雄:) – cptasker 2012-04-11 21:35:59