繁体   English   中英

从SQLite数据库在Android中填充ListView

[英]Populate ListView in android from SQLite database

我正在学习android编程,现在我正在制作一个使用数据库的应用程序。 现在我正在使用SQLite来存储数据。

我已经成功创建了可以在数据库中存储/插入数据的应用程序。 它的工作,我已经使用根资源管理器检查了我的数据库。

现在在第二个活动中,比如说DisplayRecords,我想将我的记录显示到动态填充的列表视图中。 我如何通过编程实现这一目标。

这是我第二次活动的代码。

public class SearchResult extends ActionBarActivity {

ListView ls;
SQLiteDatabase db;

@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onCreate(savedInstanceState);
    setContentView(R.layout.search_result);

     Toolbar toolbar = (Toolbar)findViewById(R.id.toolbar);
     setSupportActionBar(toolbar);


     ls = (ListView)findViewById(R.id.displayListView);

 Cursor c = db.rawQuery("SELECT * FROM records",null);

     if(c.getCount()==0){
         Toast.makeText(getApplicationContext(), "No Records Found", Toast.LENGTH_LONG).show();
         setContentView(R.layout.activity_main);
     }

     StringBuffer buffer = new StringBuffer();

     while(c.moveToNext()){

         buffer.append("Topic"+c.getString(0));
         buffer.append("Description"+c.getString(1));
     }

     //now how can i put the fetched value in ListView

}

谁能帮帮我吗

谢谢

保存您的数据的类

 public class Naats_VO {

    private String id;
    private String person_id;
    private String title;
    private String keywords;
    private String language;
    private String type;
    private String length;
    private String url;
    private String fav_count;
    private String hit_count;
    private String release_date;

    public Naats_VO() {
    }

    public Naats_VO(String id, String person_id, String title, String keywords,
            String language, String type, String length, String url,
            String fav_count, String hit_count, String release_date) {
        super();
        this.id = id;
        this.person_id = person_id;
        this.title = title;
        this.keywords = keywords;
        this.language = language;
        this.type = type;
        this.length = length;
        this.url = url;
        this.fav_count = fav_count;
        this.hit_count = hit_count;
        this.release_date = release_date;
    }

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public String getPerson_id() {
        return person_id;
    }

    public void setPerson_id(String person_id) {
        this.person_id = person_id;
    }

    public String getTitle() {
        return title;
    }

    public void setTitle(String title) {
        this.title = title;
    }

    public String getKeywords() {
        return keywords;
    }

    public void setKeywords(String keywords) {
        this.keywords = keywords;
    }

    public String getLanguage() {
        return language;
    }

    public void setLanguage(String language) {
        this.language = language;
    }

    public String getType() {
        return type;
    }

    public void setType(String type) {
        this.type = type;
    }

    public String getLength() {
        return length;
    }

    public void setLength(String length) {
        this.length = length;
    }

    public String getUrl() {
        return url;
    }

    public void setUrl(String url) {
        this.url = url;
    }

    public String getFav_count() {
        return fav_count;
    }

    public void setFav_count(String fav_count) {
        this.fav_count = fav_count;
    }

    public String getHit_count() {
        return hit_count;
    }

    public void setHit_count(String hit_count) {
        this.hit_count = hit_count;
    }

    public String getRelease_date() {
        return release_date;
    }

    public void setRelease_date(String release_date) {
        this.release_date = release_date;
    }

}

包含ListView的活动

            private List<Naats_VO> naats_list; 
            private Naat_Model db;
            Naats_Adapter adapter ;

            // Initilizae in OnCreate
            naats_list; = new ArrayList<Naats_VO>();
            // Naat_Model is class which communicate with my db.
            db = new Naat_Model(this);

            naats_list = db.getFavorites();

            adapter = new Naats_Adapter(this, naats_list );
            listView.setAdapter(adapter);

Naat_Model

    public class Naat_Model extends _BaseModel {

    // Contacts table name persons
    public static final String TABLE_NAAT = "naats";

    // persons Table Columns names
    public static final String KEY_ID = "id";
    public static final String KEY_PERSON_ID1 = "person_id";
    public static final String KEY_TITLE = "title";
    public static final String KEY_KEYWORDS = "keywords";
    public static final String KEY_LANG1 = "language";
    public static final String KEY_TYPE = "type";
    public static final String KEY_LENGTH = "length";
    public static final String KEY_URL = "url";
    public static final String KEY_FAV_COUNT = "fav_count";
    public static final String KEY_HIT_COUNT = "hit_count";
    public static final String KEY_RELEASE_DATE = "release_date";
    public static final String KEY_FAVR = "favorite";
    public static final String KEY_RECENT = "recent";
    public static final String KEY_DOWNLOAD_STATUS = "status";
    public static final String KEY_DOWNLOAD_id = "downloader_id";
    public static final String KEY_NOTIFICATION_ID = "notifiaction_id";
    public static final String KEY_CREATED_AT = "created_at";

    private SQLiteDatabase db;
    private Context _context;

    public Naat_Model(Context context) {
        super(TABLE_NAAT, context);
        // TODO Auto-generated constructor stub
        _context = context;
    }

    public List<Naats_VO> getFavorites() {

        List<Naats_VO> Naats_list = new ArrayList<Naats_VO>();
        // Select All Query
        String selectQuery = "SELECT  * FROM " + TABLE_NAAT + " WHERE "
                + KEY_FAVR + " = 1";

        Database dbHelper = new Database(_context);
        this.db = dbHelper.getReadableDatabase();
        Cursor c = db.rawQuery(selectQuery, null);

        // looping through all rows and adding to list
        if (c.moveToFirst()) {
            do {
                Naats_VO naats = new Naats_VO();

                naats.setId(c.getString(c.getColumnIndex(KEY_ID)));
                naats.setPerson_id(c.getString(c.getColumnIndex(KEY_PERSON_ID1)));
                naats.setTitle(c.getString(c.getColumnIndex(KEY_TITLE)));
                naats.setKeywords(c.getString(c.getColumnIndex(KEY_KEYWORDS)));
                naats.setLanguage(c.getString(c.getColumnIndex(KEY_LANG1)));
                naats.setType(c.getString(c.getColumnIndex(KEY_TYPE)));
                naats.setLength(c.getString(c.getColumnIndex(KEY_LENGTH)));
                naats.setUrl(c.getString(c.getColumnIndex(KEY_URL)));
                naats.setFav_count(c.getString(c.getColumnIndex(KEY_FAV_COUNT)));
                naats.setHit_count(c.getString(c.getColumnIndex(KEY_HIT_COUNT)));
                naats.setRelease_date(c.getString(c
                        .getColumnIndex(KEY_RELEASE_DATE)));

                // Adding contact to list
                Naats_list.add(naats);
            } while (c.moveToNext());
        }
        db.close();
        c.close();
        // return contact list
        return Naats_list;
    }

此类会将您的数据库与应用程序http://i.stack.imgur.com/0fFtD.png连接起来

    public class Database extends SQLiteAssetHelper {
    private static final String DATABASE_NAME = "naat_collection";

    private static final int DATABASE_VERSION = 1;

    public Database(Context context) {
        super(context, DATABASE_NAME, null, DATABASE_VERSION);
        // super(context, DATABASE_NAME,
        // context.getExternalFilesDir(null).getAbsolutePath(), null,
        // DATABASE_VERSION);

       }

    }

因此,在很大的范围内使用Android中的数据库进行工作,我将尽力为您提供一些指导。

首先,您应该使用ContentResolver而不是直接调用数据库来获取Cursor,这有助于避免UI挂在艰难的查询上,因为ContentResolver在单独的线程中执行查询。

为了解决您的任务(使用数据填充ListView并在更改时进行更新),Android提供了Loaders机制。

您必须通过Activity中的getLoaderManager方法使用LoaderManager 然后实现LoaderManager.LoaderCallbacks(我将其称为loaderCollback)

loaderCallback方法onCreateLoader中,您应该创建特定的CursorLoader (它将完成所有工作,以正确查询单独线程中的db)

loaderCallback方法onLoadFinished中初始化加载器之后,您将收到光标,所有要做的就是调用ListView的CursorAdapter的swapCursor方法。 最后是魔术:您必须编写这样的内容

cursor.setNotificationUri(getActivity.getContentResolver(), queryUri)

从高角度来看这一切。

有关更多详细信息,请查看本教程。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM