Как сохранить два значения EditText в ключе - PullRequest
0 голосов
/ 06 августа 2020

Это мой код

final String name = subjectEditText.getText().toString();
final String desc = descEditText.getText().toString();

String DateNow = new SimpleDateFormat("ddmmyyyy", Locale.getDefault()).format(new Date());
FirebaseDatabase database = FirebaseDatabase.getInstance();
DatabaseReference myRef = database.getReference("products/" + DateNow);
myRef.setValue(name, desc);

Но два значения не сохраняются, только имя.

Ответы [ 2 ]

0 голосов
/ 06 августа 2020

Использование карты.

String DateNow = new SimpleDateFormat("ddmmyyyy", 
Locale.getDefault()).format(new Date());
FirebaseDatabase database = 
FirebaseDatabase.getInstance();
DatabaseReference myRef = 
database.getReference("products/" + DateNow);
final String name = 
subjectEditText.getText().toString();

final String desc = 
descEditText.getText().toString();
Map<String, Object> data = new HashMap<> ();
data.put("name", name);
data.put("desc", desc);
myRef.set (data).addOnSuccussListener(...)...;

Вместо этого вы можете заменить

data.put("name", name);
data.put("desc", desc);

на

data.put("name_desc_array", name_desc_array);

Но вам нужно создать массив с

ArrayList<String> name_desc_array = new ArrayList();
name_desc_array.add ("name");
name_desc_array.add ("desc");

Помните, что лучше всего использовать карту

0 голосов
/ 06 августа 2020

Второе значение , которое вы передаете на setValue, устанавливается как приоритет узла. Этот приоритет не отображается в консоли Firebase, но он сохраняется и извлекается через API. Если вы получите DataSnapshot для узла, вы можете использовать getPriority(), чтобы вернуть desc.

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

В настоящее время, если вы хотите сохранить несколько значений под узлом, вы должны дать им имена. Например:

final String name = subjectEditText.getText().toString();
final String desc = descEditText.getText().toString();

String DateNow = new SimpleDateFormat("ddmmyyyy", Locale.getDefault()).format(new Date());
FirebaseDatabase database = FirebaseDatabase.getInstance();
DatabaseReference myRef = database.getReference("products/" + DateNow);
Map<String, Object> values = new HashMap<>();
values.put("name", name);
values.put("desc", desc);
myRef.setValue(values);

Это создаст небольшую структуру JSON под DateNow с:

{
  "name": "the name from the text field",
  "desc": "the value from the desc field"
}

Затем вы можете прочитать это значение с помощью:

myRef.addListenerForSingleValueEvent(new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        Log.i("database", dataSnapshot.child("name").getValue(String.class);
        Log.i("database", dataSnapshot.child("desc").getValue(String.class);
    }

    @Override
    public void onCancelled(DatabaseError databaseError) {
        throw databaseError.toException();
    }
}
...