Почему запись в базу данных Firebase не выполняется? - PullRequest
0 голосов
/ 10 ноября 2019

В этом коде запись в базу данных выполняется только для последнего элемента (из 9 элементов) .. все журналы в коде отображаются нормально ... перевод выполняется и корректно возвращается в журнал для всех элементов. Только запись в базу данных Firebase не выполняется, за исключением последнего элемента. это связано с вызовом updatechildern из кода переводчика?

  myRef
     .limitToFirst(1)
     .addListenerForSingleValueEvent(new ValueEventListener() {
            @Override
            public void onDataChange(@NonNull DataSnapshot dataSnapshot) {

                if (dataSnapshot.hasChildren()) {
                    final Iterator<DataSnapshot> iterator1 = dataSnapshot.getChildren().iterator();
                    do {
                        DataSnapshot ds = iterator1.next();
                        iteratorkey = ds.getKey();
                        Log.e(TAG, "Current key is : " + iteratorkey);

                        Iterator<DataSnapshot> iterator2 = ds.getChildren().iterator();

                        do {

                            item = iterator2.next().getValue(Item.class);

                            englishArabicTranslator.translate(item.getLang())
                                    .addOnSuccessListener(
                                            new OnSuccessListener<String>() {
                                                @Override
                                                public void onSuccess(@NonNull String translatedText) {
                                                    // Translation successful.
                                                    myhashmap.clear();
                                                    Log.e(TAG, " translation successful " + translatedText);
                                                    myhashmap.put("translation", translatedText);
                                                    myhashmap.put("iteratorkey", iteratorkey);
                                                    myhashmap.put("number", item.getNum());

                                                    thelist.add(myhashmap);

                                                    Log.e(TAG, " the list :  " + thelist.size());

                                                   HashMap<String, Object> map = new HashMap<>();
                                                    map.put("base", translatedText);

                                                   //Write to database 
                                                           myRef
                                                            .child(iteratorkey).child(item.getNum()).updateChildren(map);
                                                }
                                            })
                                    .addOnFailureListener(
                                            new OnFailureListener() {
                                                @Override
                                                public void onFailure(@NonNull Exception e) {
                                                    // Error.
                                                    // ...
                                                    Log.e(TAG, "error in translation");
                                                }
                                            });

                        } while (iterator2.hasNext());
                        textView.append(iteratorkey + "\n");

                    } while (iterator1.hasNext());
                    Log.e(TAG, " A the list size :  " + thelist.size());
                }
                Log.e(TAG, " B the list size :  " + thelist.size());
            }
            @Override
            public void onCancelled(@NonNull DatabaseError databaseError) {

            }
        });

    }
});

1 Ответ

0 голосов
/ 10 ноября 2019

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

Проблема в том, что firebase всегда пишет одному и тому же ребенку. Вот почему я подумал, что только последний пункт изменен. Когда я звоню по номеру товара

 item.getNum()

Это всегда будет последним найденным значением, может быть, кто-то может объяснить это более подробно.

Так что я только что объявил предмет финальным.

final Item item = iterator.next().getValue(Item.class);

Теперь данные в базе данных Firebase изменяются в соответствии с назначением.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...