База данных Firebase Realtime не обновляет детей - PullRequest
0 голосов
/ 31 марта 2020

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

 public void PostToDatabase(String databasestring, ArrayList<Integer> arrayList)
{
    database = FirebaseDatabase.getInstance();
    myRef = database.getReference(databasestring);

    Map<String,Object> postvalues =  new HashMap<>();

    for (int i = 0;i<arrayList.size();i++) {
        postvalues.put(myRef.child(String.valueOf(i)).getKey(),arrayList.get(i));
    }
    myRef.updateChildren(postvalues);
}

похоже, что «i» не сбрасывается после каждого щелчка.

***** РЕДАКТИРОВАТЬ **** *

public void PostToDatabase(String databasestring, ArrayList<Integer> arrayList)
{

    database = FirebaseDatabase.getInstance();
    myRef = database.getReference(databasestring);

    Map<String, Object> childUpdates = new HashMap<>();

    for (int i = 0;i<arrayList.size();i++) {
        MyPacket myPacket = new MyPacket(arrayList.get(i).toString(), false, true, false);
        Map<String, Object> postValues = myPacket.toMap();

        childUpdates.put(myRef.child("Numbers").push().getKey(),postValues);
    }
    myRef.updateChildren(childUpdates).addOnCompleteListener(new OnCompleteListener<Void>() {
        @Override
        public void onComplete(@NonNull Task<Void> task) {
            if(task.isSuccessful())
            {
                Log.d(TAG,"onComplete");
            }
            else
            {
                Log.e(TAG,"onComplete", task.getException());
            }
        }
    });
}

Вызов функции

B_weiter.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {

            for (int index1 = 0; index1 < (tableLayout).getChildCount(); ++index1) {
                TableRow upperChild = (TableRow) (tableLayout).getChildAt(index1);
                for (int index2 = 0; index2 < ((ViewGroup) upperChild).getChildCount(); ++index2) {
                    EditText lowerChild = (EditText) ((ViewGroup) upperChild).getChildAt(index2);
                    myNumbers.add(Integer.parseInt(lowerChild.getText().toString()));
                }

            }
            ((WaeschelisteActivity)getActivity()).PostToDatabase("Numbers",myNumbers);
            myNumbers.clear();
        }


    });

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

1 Ответ

0 голосов
/ 31 марта 2020
public void PostToDatabase(String databasestring, ArrayList<Integer> arrayList)
{

    database = FirebaseDatabase.getInstance();
    myRef = database.getReference(databasestring);

    Map<String, Object> childUpdates = new HashMap<>();

    for (int i = 0;i<arrayList.size();i++) {
        MyPacket myPacket = new MyPacket(arrayList.get(i).toString(), false, true, false);
        Map<String, Object> postValues = myPacket.toMap();

        childUpdates.put("/user-posts/" + i ,postValues);
    }
    myRef.updateChildren(childUpdates);
    childUpdates.clear();

}

я избавился от ключа и добавил "/ user-posts /" в childUpdates, он работает !!! Спасибо за вашу помощь!

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