【问题标题】:Populate ListView in android from SQLite database从 SQLite 数据库填充 android 中的 ListView
【发布时间】:2015-07-01 14:33:37
【问题描述】:

我只是在学习 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

}

谁能帮帮我

谢谢

【问题讨论】:

  • 这是一个骨架肉体在哪里?
  • @DerGolem 我只想要肉,因为我有骨架
  • 但它不是那样工作的,在这里:StackOverflow is not a Google replacement。您应该搜索教程并遵循它。如果你弄得一团糟,那就把你的烂摊子带回来,我们会做些什么来解决它。
  • 我知道它不是谷歌,但我希望有人帮助我提供代码,以便我可以理解该代码并在我的应用程序中实现。我在网上搜索过,但对我来说太复杂了。所以如果你能帮我解决我的代码部分,因为我还在学习。
  • 你应该使用谷歌,首先。拿一个教程。如果您不理解它,请选择另一种(有几种方法可以做同样的事情 - 选择最适合您的一种)。如果没有任何效果,请使用无效代码。但不要在这里索要代码。

标签: android sqlite listview dynamically-generated


【解决方案1】:

所以,在 Android 中使用数据库是一个很大的领域,我会尝试给你一些方向。

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

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

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

loaderCallback 方法 onCreateLoader 中,您应该创建特定的 CursorLoader(它将在单独的线程中正确查询 db)

loaderCallback 方法 onLoadFinished 中初始化加载程序后,您将收到您的光标,您只需为 ListView 的 CursorAdapter 调用 swapCursor 方法即可。最后是魔法:你必须写这样的东西

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

这都是从高处看的。

更多详情可以查看tutorial

【讨论】:

  • 感谢您的回答。说真的,我不明白你说的任何想法。从你所说的我得出的结论是,这对我来说很难,我仍然需要学习很多关于数据处理的知识。任何方式,感谢您的时间和回答。 +1
  • 只需调查答案中的链接 :) 如果它不是在评论中而是在左侧切换有帮助,您也应该为答案投票;-)
  • 我会检查的。我无法投票,因为我的声誉未超过 15 岁,因此我无法投票。
【解决方案2】:

保存数据的类

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

       }

    }

【讨论】:

    猜你喜欢
    • 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
    相关资源
    最近更新 更多