android - 从数据库中获取存储的数据到 ListView 中。

标签 android listview

package one.two;


import java.util.ArrayList;
import java.util.List;

import android.app.ListActivity;
import android.database.Cursor;
import android.inputmethodservice.Keyboard.Row;
import android.os.Bundle;
import android.view.Menu;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.TextView;

public class List_View extends ListActivity {

    private ListView lv; 
    private TextView toptext; 
    private TextView bottomtext;

    DBAdapter db = new DBAdapter(this);

    public void onCreate(Bundle icicle)
    {
        super.onCreate(icicle);
        setContentView(R.layout.list_main);
        DBAdapter db = new DBAdapter(this);
        getData();

        toptext = (TextView) findViewById(R.id.toptext); 
        bottomtext = (TextView) findViewById(R.id.bottomtext); 


    }

    private void getData() {

        db.open();

        List<String> items = new ArrayList<String>();

         Cursor c = db.getAllEntry();
         c.moveToFirst(); 

         toptext.setText("Date: "+c.getString(4));
         bottomtext.setText("Title: "+c.getString(1));



         ArrayAdapter<String> entries = new ArrayAdapter<String>(this, R.layout.view_list, items);
         setListAdapter(entries);

         db.close(); 
    }

}

我无法将数据库中的数据放入我的 ListView

这是我的数据库代码:

package one.two;

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 DBAdapter 
{   
//values for the login table
public static final String KEY_ROWID = "_id";
public static final String KEY_USER = "user";
public static final String KEY_PASSWORD = "pass";
public static final String KEY_NUMBER ="no";

//Values for the entry table
public static final String KEY_ROWID2 = "_id2";
public static final String KEY_TITLE = "title";
public static final String KEY_ENTRY = "entry";
public static final String KEY_MOOD = "mood";
public static final String KEY_DATE = "date";
public static final String KEY_TIME = "time";

private static final String TAG = "DBAdapter";
//declare Database name, tables names
private static final String DATABASE_NAME = "Database3";
private static final String DATABASE_TABLE = "Login";
private static final String DATABASE_TABLE_2 = "Entry";
private static final int DATABASE_VERSION = 1;

//declares the rules for the database tables
private static final String DATABASE_CREATE =
    "create table login (_id integer primary key autoincrement, "
    + "user text not null, pass text not null," 
    + " no integer not null);";

private static final String DATABASE_CREATE_2 =
    "create table entry (_id2 integer primary key autoincrement, "
    + "title text,entry text, mood text not null, date text not null, "
    + "time text not null);";


private final Context context; 

private DatabaseHelper DBHelper;
private SQLiteDatabase db;

public DBAdapter(Context ctx) 
{
    this.context = ctx;
    DBHelper = new DatabaseHelper(context);
}

private static class DatabaseHelper extends SQLiteOpenHelper 
{
    DatabaseHelper(Context context) 
    {
        super(context, DATABASE_NAME, null, DATABASE_VERSION);
    }

    //Create the tables with the rules we set.
    @Override
    public void onCreate(SQLiteDatabase db) 
    {
        db.execSQL(DATABASE_CREATE);
        db.execSQL(DATABASE_CREATE_2);
    }

    //OnUpgrade is only for use when u changed the database's version to 2 etc.
    @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 titles");
        onCreate(db);
    }
}    

//---opens the database---
public DBAdapter open() throws SQLException 
{
    db = DBHelper.getWritableDatabase();
    return this;
}

//---closes the database---    
public void close() 
{
    DBHelper.close();
}

//Method for inserting login details, can be used in other java files when DBAdapter is
//declared in the java file. e.g. DBAdapter db = new DBAdapter(this);
public long insertLogin(String user, String pass, String no) 
{
    ContentValues initialValues = new ContentValues();
    initialValues.put(KEY_USER, user);
    initialValues.put(KEY_PASSWORD, pass);
    initialValues.put(KEY_NUMBER, no);
    return db.insert(DATABASE_TABLE, null, initialValues);
}


public long insertEntry(String title, String entry, String mood, String date, String time) 
{
    ContentValues initialValues = new ContentValues();
    initialValues.put(KEY_TITLE, title);
    initialValues.put(KEY_ENTRY, entry);
    initialValues.put(KEY_MOOD, mood);
    initialValues.put(KEY_DATE, date);
    initialValues.put(KEY_TIME, time);
    return db.insert(DATABASE_TABLE_2, null, initialValues);
}


//---deletes a particular title---
public boolean deleteLogin(long rowId) 
{
    return db.delete(DATABASE_TABLE, KEY_ROWID + 
            "=" + rowId, null) > 0;
}

public boolean deleteEntry(long rowId2) 
{
    return db.delete(DATABASE_TABLE_2, KEY_ROWID2 + 
            "=" + rowId2, null) > 0;
}

//method for retrieving all the inputs from database
public Cursor getAllLogin() 
{
    return db.query(DATABASE_TABLE, new String[] {
            KEY_ROWID, 
            KEY_USER,
            KEY_PASSWORD,               
            KEY_NUMBER,},
            null, 
            null, 
            null, 
            null, 
            null, 
            null);
}   



public Cursor getAllEntry() 
{
    return db.query(DATABASE_TABLE_2, new String[] {
            KEY_ROWID2,
            KEY_TITLE,
            KEY_ENTRY,
            KEY_MOOD,
            KEY_DATE,
            KEY_TIME},
            null, 
            null, 
            null, 
            null, 
            null, 
            null);
}


//---retrieves a particular title---
public Cursor getLogin(long rowId) throws SQLException 
{
    Cursor mCursor =
            db.query(true, DATABASE_TABLE, new String[] {
                    KEY_ROWID,
                    KEY_USER, 
                    KEY_PASSWORD,
                    KEY_NUMBER}, 
                    KEY_ROWID + "=" + rowId, 
                    null,
                    null, 
                    null, 
                    null, 
                    null);
    if (mCursor != null) {
        mCursor.moveToFirst();
    }
    return mCursor;
}

public Cursor getEntry(long rowId2) throws SQLException 
{
    Cursor mCursor =
            db.query(true, DATABASE_TABLE_2, new String[] {
                    KEY_ROWID2,
                    KEY_TITLE,
                    KEY_ENTRY, 
                    KEY_MOOD,
                    KEY_DATE,
                    KEY_TIME}, 
                    KEY_ROWID2 + "=" + rowId2, 
                    null,
                    null, 
                    null, 
                    null, 
                    null);
    if (mCursor != null) {
        mCursor.moveToFirst();
    }
    return mCursor;
}


//---updates a title---
public boolean updateLogin(long rowId, String user, 
String pass, String no) 
{
    ContentValues args = new ContentValues();
    args.put(KEY_USER, user);
    args.put(KEY_PASSWORD, pass);
    args.put(KEY_NUMBER, no);
    return db.update(DATABASE_TABLE, args, 
                     KEY_ROWID + "=" + rowId, null) > 0;
}

public boolean updateEntry(long rowId,String title, String entry, 
        String mood, String date, String time) 
        {
            ContentValues args = new ContentValues();
            args.put(KEY_TITLE, title);
            args.put(KEY_ENTRY, entry);
            args.put(KEY_MOOD, mood);
            args.put(KEY_DATE, date);
            args.put(KEY_TIME, time);
            return db.update(DATABASE_TABLE, args, 
                             KEY_ROWID + "=" + rowId, null) > 0;
        }


}

无法显示。希望你们能帮助我!

最佳答案

您没有使用检索到的数据填充列表。并且,在这些情况下,您应该使用 SimpleCursorAdapter:

private void getData() {

    db.open();

    List<String> items = new ArrayList<String>();

     Cursor c = db.getAllEntry();
     c.moveToFirst(); 

     ListAdapter adapter=new SimpleCursorAdapter(this,
                     R.layout.view_list, c,
                     new String[] {"date", "title"},
                     new int[] {R.id.toptext, R.id.bottomtext});
     setListAdapter(adapter);

     setListAdapter(entries);

     db.close(); 
}

在这种情况下,我猜你的表有一个名为 date 的列和另一个名为 title 的列。查看此示例以供进一步引用:SimpleCursorAdapters and ListViews

关于android - 从数据库中获取存储的数据到 ListView 中。,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3090041/

相关文章:

android - 如何使用箭头键将焦点从撰写按钮移动到撰写文本字段?

android - 带有 IMEOption DONE 或 NEXT 的多行 EditText 不起作用

android - SwipeListView 前端点击bug 2.3 android

java - 创建 ListView 时出现运行时错误

android - 是否可以使用 4.4w(级别 20)构建一个应用程序并使用 google api?

java - Android 内存不足错误位图

android - 如何在不使用Json的情况下在android中执行HTTP POST请求

android - ListView 中的搜索数据 react native

android - 删除 ListView 中页脚后的分隔线

java - 如何在 ArrayAdapter 中使用带有 4 个不同单选按钮的 Radiogroup