【问题标题】:Populating a ListView from a Sqlite databse从 Sqlite 数据库填充 ListView
【发布时间】:2014-12-10 01:21:50
【问题描述】:

我浏览了很多教程,但似乎仍然找不到我想要的东西。我需要将存储在我的 SQLite 数据库 中的信息显示在 ListView 中。我创建了数据库,并且我知道其中包含正确的信息,但是当我使用 ListView 查看页面时,什么都没有。该应用程序不会崩溃,也没有任何错误,它只是空的。作为参考,ListView 的内容位于代码的第一部分,而数据库的 Cursor 位于代码的第二部分的底部。另外,请注意,我对 Android 还很陌生,可能会遗漏一些非常简单的东西。

如有任何问题,请随时提出,感谢您的回答!

这是我的一些代码:

public class Main_Screen extends Activity implements OnClickListener {

Button Test;
Button New;
ListView PassEntries;
DBHelper myDb;

  @Override
  public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.screen_main);

    Test = (Button) findViewById(R.id.buttonTEST);
     // This button is meant to refresh the ListView
    New = (Button) findViewById(R.id.button10);
     // This button takes the user to a new screen where they input the data into the Database
    PassEntries = (ListView) findViewById(R.id.listView1);

    openDB();
    populatePassEntriesFromDB();

    Test.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub
            populatePassEntriesFromDB();
        }
    });

    New.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub
             myDb.close();
             Intent NewPass = new Intent(getApplicationContext(), NewPass.class);
             startActivity(NewPass);
        }
    });

}

private void populatePassEntriesFromDB() {
    // TODO Auto-generated method stub
    Cursor CR = myDb.getAllRows();

    String[] fromFieldNames = new String[]
            {DBinfo.ACC_NAME};
    int[] toViewIDs = new int[]
            {R.id.nameView};

    ListAdapter Adapter = new SimpleCursorAdapter(
                    this, 
                    R.layout.list_view_display,
                    CR,
                    fromFieldNames,
                    toViewIDs
                    );

    setListAdapter(Adapter);
}

private void setListAdapter(ListAdapter adapter) {
    // TODO Auto-generated method stub

}

private void openDB() {
    // TODO Auto-generated method stub
    myDb = new DBHelper();
    myDb.open();
}

@Override
public void onClick(View v) {
    // TODO Auto-generated method stub

}
}

还有我的数据库类 -

public class DatabaseOperations extends SQLiteOpenHelper {
public static final int database_version = 1;
public String CREATE_QUERY = "CREATE TABLE table_info ( " +
               "acc_name TEXT, "+
               "acc_pass TEXT, "+
               "acc_notes TEXT )";

public DatabaseOperations(Context context) {
    super(context, DBinfo.DATABASE_NAME, null, database_version);
    // TODO Auto-generated constructor stub
    Log.d("Database operations", "Database created");
}

@Override
public void onCreate(SQLiteDatabase sdb) {
    // TODO Auto-generated method stub
    sdb.execSQL(CREATE_QUERY);
    Log.d("Database operations", "Table created");
}

@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
    // TODO Auto-generated method stub

}

public void putInformation(DatabaseOperations dop, String acc_name, String acc_pass, String acc_notes)

{
SQLiteDatabase SQ = dop.getWritableDatabase();
ContentValues cv = new ContentValues();
cv.put(DBinfo.ACC_NAME, acc_name);
cv.put(DBinfo.ACC_PASS, acc_pass);
cv.put(DBinfo.ACC_NOTES, acc_notes);
// cv.put(DBinfo.ACC_TYPE, type);
long k = SQ.insert(DBinfo.TABLE_NAME, null, cv);
Log.d("Database operations", "One raw inserted");

}

public Cursor getInformation(DatabaseOperations dop)
{
    SQLiteDatabase SQ = dop.getReadableDatabase();
    String[] coloumns = {DBinfo.ACC_NAME,DBinfo.ACC_PASS,DBinfo.ACC_NOTES};
    Cursor CR = SQ.query(DBinfo.TABLE_NAME, coloumns, null, null, null, null, null);
    return CR;
}
}

-

public class DBHelper {

public DBHelper()
{

}

public static abstract class DBinfo implements BaseColumns
{
    public static final String ACC_NAME = "acc_name" ;
    public static final String ACC_PASS = "acc_pass" ;
    public static final String ACC_NOTES = "acc_notes" ;
    public static final String DATABASE_NAME = "acc_info" ;
    public static final String TABLE_NAME = "table_info" ;
}

public void open() {
    // TODO Auto-generated method stub

}

public Cursor getAllRows() {
    // TODO Auto-generated method stub
    return null;
}

public void close() {
    // TODO Auto-generated method stub

}
}

【问题讨论】:

    标签: java android sqlite listview cursor


    【解决方案1】:

    PassEntries.setAdapter - 你没有调用这个方法,所以你没有将适配器设置为你的ListViewsetListAdapter 方法实现在您的代码中为空。删除空的setListAdapter 方法并调用PassEntries.setAdapter 而不是它。接下来是 DBHelper.getAllRows 方法在您的代码中只返回 null,但它应该将数据库上的查询结果作为 Cursor 对象返回。

    【讨论】:

    • 更改后我从 Eclipse 收到这些错误:语法错误,插入“VariableDeclarators”以完成 LocalVariableDeclaration - PassEntries 无法解析为类型
    • 我是这样设置的,但仍然出现错误,但是当我将其更改为 PassEntries.setAdapter(Adapter) 时,它没有给出任何错误.. 这仍然适用于我们正在尝试做的事情吗?
    • 好的,进入Cursor,返回类型应该是什么?
    • 好吧,从 DBHelper.getAllRows 你应该返回 Cursor 作为你的数据库查询的结果,可能是你的代码中方法 getInformation 的结果。
    • 我一直在尝试一些不同的方法来做你所说的,我什至无法设法获得没有错误的代码。是否有可能比这更进一步解释它,或者我只是错过了一些明显的东西? @michal.z
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-11-09
    • 1970-01-01
    • 1970-01-01
    • 2015-06-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多