繁体   English   中英

如何将自定义 ArrayList 保存到 SQLite 数据库并检索值

[英]How to save a Custom ArrayList to SQLite database and retrieve the values

所以我有一个 RedditPost 类型的客户 Arraylist:

这是 RedditPost Class:

我观看了这个 Helper 的教程,但是我知道其中很多内容都不对,并希望保存和检索我的 RedditPost ArrayList。 如果您想查看更多代码,请询问。 对不起,我对 java 真的很陌生

在您的 getData 方法中:

 public List<RedditPost> getData(){ List<RedditPost> posts = new ArrayList<>(); SQLiteDatabase db = this.getReadableDatabase(); String query = "SELECT * FROM " + TABLE_NAME; Cursor data = db.rawQuery(query, null); if(data.moveToFirst()){ do{ RedditPost post = new RedditPost(); post.setId = data.getString(0); post.setTitle = data.getString(1); post.setUrl = data.getString(2); posts.add(post); } while(data.moveToNext); } data.close; return posts; }

您可以使用语句以优化的方式插入批量数据,可以像使用它 -

private static final String INSERT = "insert into "
            + TABLE_NAME+ " (" + COLUMN_1 + ", "
            + COLUMN_2 + ", "+COLUMN_3+") values (?, ?, ?)";

public void insertReditPosts(ArrayList<RedditPost> redditPosts) {
        SQLiteDatabase database = this.getWritableDatabase();
        int aSize = redditPosts.size();
        database.beginTransaction();
        try {
            SQLiteStatement insert = database.compileStatement(INSERT);
            for (int i = 0; i < aSize; i++) {
                insert.bindString(1, redditPosts.get(i).id);
                insert.bindString(2, redditPosts.get(i).title);
                insert.bindString(3, redditPosts.get(i).url);
                insert.executeInsert();
            }
            database.setTransactionSuccessful();
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            database.endTransaction();
        }
    }

从您的活动中只需调用此方法并传递 ArrayList 它将将其存储到数据库中。 添加此代码以在列表视图中长按存储单击的项目

lv.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {
            @Override
            public boolean onItemLongClick(AdapterView<?> arg0, View arg1,
                                           int pos, long id) {
                Log.v("long clicked","pos: " + pos);
                RedditPost redditPost = postsArrayList.get(pos);
                if(redditPost!=null) {
                    addPostData(redditPost);
                }
                return true;
            }
        });

暂无
暂无

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

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