我正在使用Firebase应用程序,我想将超过5000个检索到的PriceList项目列表保存到SQLite中。
这是我的 Firebase代码:
@Override
protected void onStart() {
super.onStart();
mRef.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
pricesArrayList.clear();
for (DataSnapshot PricesListDataSnapshot : dataSnapshot.getChildren()) {
PricesList pricesList = PricesListDataSnapshot.getValue(PricesList.class);
pricesArrayList.add(pricesList);
// I don't know what is the insertion code for SQLite
}
// here goes the code for retrieved data from SQLite after it was saved from Firebase
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
}
这是 DB.class 代码
private class DBHelper extends SQLiteOpenHelper {
private static final int VERSION = 1;
private static final String DB_NAME = "MyDB1.db";
public static final String id = "_id";
public static final String ItemCode = "ItemCode";
public static final String Product = "Product";
DBHelper(Context context) {
super(context, DB_NAME, null, VERSION);
}
@Override
public void onCreate(SQLiteDatabase db) {
String create_sql = "CREATE TABLE IF NOT EXISTS "
+ DB_NAME + '(' + id
+ " INTEGER PRIMARY KEY AUTOINCREMENT,"
+ ItemCode + " TEXT ,"
+ Product + " TEXT ," +')';
db.execSQL(create_sql);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
db.execSQL("DROP TABLE IF EXISTS " + DB_NAME );
}
}
应使用什么代码在SQLite数据库中存储项目列表? 我将感谢任何有此答案的人。
答案 0 :(得分:1)
在您的DBHelper中,您需要一个将数据插入db中的方法。 首先:创建方法
public void isInsertData(Price price) {
try {
SQLiteDatabase db = this.getWritableDatabase();
ContentValues insertValues = new ContentValues();
insertValues.put(ItemCode, price.getItemCode());
insertValues.put(Product, price.getProduct());
db.insert(DB_NAME, null, insertValues);
} catch (Exception e) {
e.printStackTrace();
}
}
我看到您的表名看起来与您的数据库名相似,我建议您更改它,但是如果需要的话。
第二:我们需要一个帮助程序实例并调用new方法,下一行进入您的迭代。
DbHelper dbHelper = new DbHelper(this); //or ActivityName.this
for (DataSnapshot PricesListDataSnapshot : dataSnapshot.getChildren()) {
PricesList pricesList = PricesListDataSnapshot.getValue(PricesList.class);
pricesArrayList.add(pricesList);
dbHelper.isInsertData(pricesList);
}
就是这样!现在,您将数据保存在数据库中。
如果之后有任何疑问,建议您阅读此链接 https://developer.android.com/training/data-storage/sqlite
答案 1 :(得分:0)
在使用纯SQLite之前,我几乎不建议您使用自己喜欢的ORM,与使用纯SQLite相比,它们更易于理解,易于配置并且可扩展性更高。这是我最常使用的“ GreenDao:http://greenrobot.org/greendao/”,但是如果您不想要或不喜欢这种方法,则可以使用其他任何方法,那里有很多方法。 ORM将您的数据对象映射到SQLite表中,并提供管理数据库所需的所有方法。 使用GreenDao插入数据可以像以下示例一样简单:
NewsArticle[] newsArticles = new NewsArticle[600];
NewsArticle testArticle;
for (int i = 0; i < 600; i++) {
testArticle = new NewsArticle();
testArticle.setTitle("title-text" + i);
testArticle.setBody("body-text" + i);
testArticle.setShortDescription("short-text" + i);
testArticle.setDate(now);
newsArticles[i] = testArticle;
}
newsArticleDao.insertInTx(newsArticles);
答案 2 :(得分:0)
我要感谢所有帮助过我的人,并特别感谢@Daniel Carreto。 我应用了这些步骤,效果很好,但是我添加了逻辑方法(if),其中(如果Sqlite为空)调用firebase数据并将其保存到SQLite中,然后停止调用valueEventListener (如果不是),则会获取 SQLite.class 的查询。 它运作良好,但是当我完成活动并再次打开它时,过程再次开始 这是更新后的代码
def corners(Xs, Ys):
# ...
return a, b, c, d
def make_interval(a, b, c, d):
return [a, b]
def slice_image(image, a, b, c, d):
return image[a:d, b:c]
如何使用 removeEventListener ,该方法的位置在哪里?