Как сохранить данные в базе данных с помощью randomID? - PullRequest
0 голосов
/ 09 ноября 2018

Я хочу заменить слова «один», которые выделены желтым цветом, случайными идентификаторами, сгенерированными с помощью firebase, так же, как мои дочерние узлы являются случайно сгенерированными идентификаторами, используя метод push. I hope this picture can better explain my question.

FirebaseDatabase database = FirebaseDatabase.getInstance();
final DatabaseReference Med_History = database.getReference("Patient_Medication_History");

Med_History.child(SignInIC.CustomUID).addListenerForSingleValueEvent(new ValueEventListener() {
    @Override
    public void onDataChange(@NonNull DataSnapshot dataSnapshot)
    {
        String taken = "Taken";
        String date = formattedDate.toString();
        String time = formattedTime.toString();
        String status = taken.toString();
        String medication = TV.getText().toString();
        String month = formattedMonth.toString();

        String combined = medication + " - " + status + " at " + time + " on " + date;
        String one = combined;

        Medication_History medication_history = new Medication_History(one);
        Med_History.child(SignInIC.CustomUID).child(month).setValue(medication_history);

        Intent Register_SignIn = new Intent(Medication_Attendance.this, HomeActivity.class);
        startActivity(Register_SignIn);
        finish();
    }

    @Override
    public void onCancelled(@NonNull DatabaseError databaseError) {
    }
});
public class Medication_History {

    private String One;

    public Medication_History() {
    }

    public Medication_History(String one) {
        One = one;
    }

    public String getOne() { return One; }

    public void setOne(String one) { One = one; }
}

Ответы [ 2 ]

0 голосов
/ 09 ноября 2018

Вы не можете использовать динамический ключ в классе Java (так называемый POJO), который вы записываете в базу данных. Но вы можете легко использовать динамический ключ, когда просто записываете примитивное строковое значение:

String combined = medication + " - " + status + " at " + time + " on " +` date;
String key = Med_History().push().getKey();
Med_History.child(SignInIC.CustomUID).child(key).setValue(combined);

Хитрость в том, что push() является чисто клиентской операцией, поэтому вы можете безопасно вызывать ее для создания идентификатора, который вы используете в другом месте.

Кстати, вышеприведенное имеет тот же результат, что и немного более идиоматический:

String combined = medication + " - " + status + " at " + time + " on " +` date;
Med_History.child(SignInIC.CustomUID).push().setValue(combined);
0 голосов
/ 09 ноября 2018

Попробуйте это:

DatabaseReference ref = FirebaseDatabase.getInstance().getReference().child("Nov");

ref.addValueEventListener(new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        for(DataSnapshot ds: dataSnapshot.getChildren()){
             String key=ds.getKey();
             String value=ds.child("one").getValue().toString();
             ref.child(key).push().setValue(value);
       }
    }

    @Override
    public void onCancelled(FirebaseError firebaseError) {}
  });

Здесь вы получаете случайный идентификатор, используя getKey(), затем вы получаете значения дочернего узла one, а затем добавляете значение случайного идентификатора key внутри child(), используйте push() метод для генерации другого случайного идентификатора и установки значения.

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