[英]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.