сохранить списокsqlite - PullRequest
       10

сохранить списокsqlite

0 голосов
/ 13 сентября 2018

Я работаю над приложением Firebase и хочу сохранить в SQLite список из более чем 5000 извлеченных элементов PricesList.

Вот мой код 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? Я буду благодарен всем, как ответ.

Ответы [ 3 ]

0 голосов
/ 13 сентября 2018

Я вряд ли рекомендую вам использовать ORM по вашему предпочтению перед использованием чистого SQLite, они легче для понимания, просты в настройке и более масштабируемы, чем использование чистого 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);
0 голосов
/ 16 сентября 2018

Я хотел бы сказать спасибо всем, кто помог мне, и особую благодарность @Daniel Carreto. Я применил шаги, и они хорошо работают, но я добавил логический метод (если) , где (если Sqlite пуст) вызывает данные Firebase и сохраняет их в SQLite, затем прекращает вызов valueEventListener (если нет) получить запрос SQLite.class . это работает хорошо, но когда я заканчиваю упражнение и открываю его снова, процесс начинается снова вот код после обновления

@Override
protected void onStart() {
    super.onStart();

    if (FB2sqLite == null) {

        ArrayList<HashMap<String, String>> myList = FB2sqLite.getProducts();
        if (myList.size() != 0) {
            ListAdapter adapter = new SimpleAdapter(FireBase_Prices.this, myList, R.layout.model,
                    new String[]{item_Code, ItemDesc},
                    new int[]{R.id.ItemCodeView, R.id.descTxt});
            listView.setAdapter(adapter);
        }

    } else {

        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);
                    FB2sqLite.insert(pricesList);
                    FB2sqLite.close();
                }

                ArrayList<HashMap<String, String>> myList = FB2sqLite.getProducts();
                if (myList.size() != 0) {
                    ListAdapter adapter = new SimpleAdapter(FireBase_Prices.this, myList, R.layout.model,
                            new String[]{item_Code, ItemDesc},
                            new int[]{R.id.ItemCodeView, R.id.descTxt});
                    listView.setAdapter(adapter);
                }
            }

            @Override
            public void onCancelled(DatabaseError databaseError) {

            }
        });
    }
}

как я могу использовать removeEventListener и где находится позиция этого метода?

0 голосов
/ 13 сентября 2018

В вашем DBHelper вам нужен метод, который вставит ваши данные в БД, так что ... во-первых: создайте метод

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

Я вижу, что имя вашей таблицы похоже на имя вашей базы данных, я рекомендую вам изменитьэто, но если хотите.

Второе: нам нужен экземпляр нашего помощника и вызов нового метода, следующая строка переходит в вашу итерацию.

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

...