为什么不执行写入Firebase数据库的操作?

时间:2019-11-10 19:34:44

标签: android firebase-realtime-database

在此代码中,仅对最后一项(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 :(得分:0)

监听器不是问题,我实际上只想检索一次数据。因为我正在编辑相同的数据,所以正在检索。

问题在于,firebase始终会写入同一孩子。那就是为什么我认为只有最后一项被修改了。 当我拨打商品号码

 item.getNum()

它将始终是最后获取的值,也许有人可以对此进行更详细的解释。

所以我刚刚宣布了final项目。

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

现在已按预期修改了Firebase数据库中的数据。