Как записать идентификатор создаваемого вами элемента Android в базу данных Firebase - PullRequest
0 голосов
/ 04 апреля 2020

Я использую базу данных реального времени. Java. Проблема в том, что я не могу получить созданный ID. У меня есть пользователь, который создает заказ:

enter image description here

Созданный заказ заносится в базу данных

enter image description here

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

Код создания заказа ниже

    private EditText mDateField, mModelField, mProblemField, mAdressField;
    private Button mConfirm;
    private FirebaseUser fuser;
    @Override     
    protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_order);

    mDateField = findViewById(R.id.date);
    mModelField = findViewById(R.id.model);
    mProblemField= findViewById(R.id.problem_desc);
    mAdressField = findViewById(R.id.adress);
    mConfirm = findViewById(R.id.confirm);
    fuser = FirebaseAuth.getInstance().getCurrentUser();
    final String userID = fuser.getUid();
    final String orderid = "";


    mConfirm.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            String date = mDateField.getText().toString();
            String model = mModelField.getText().toString();
            String adress = mAdressField.getText().toString();
            String problem = mProblemField.getText().toString();
            saveOrderInformation(orderid,userID,date,model,adress,problem);
            finish();
            AppUtilities.showToast(OrderActivity.this,"Order");
        }
    });
}

private void  saveOrderInformation(String id, String sender, String date, String model, String adress, String problem){

    DatabaseReference reference = FirebaseDatabase.getInstance().getReference();
    HashMap<String,Object> hashMap = new HashMap<>();
    hashMap.put("id",id);
    hashMap.put("sender",sender);
    hashMap.put("date",date);
    hashMap.put("model",model);
    hashMap.put("adress",adress);
    hashMap.put("problem",problem);
    reference.child("Orders").push().setValue(hashMap);
}
}

Ответы [ 2 ]

0 голосов
/ 04 апреля 2020

идентификатор пуст, потому что вы установили его пустым на final String orderid = ""; Либо вы можете удалить эту строку, либо удалить столбец отправителя в базе данных и установить для него идентификатор. Или, если вы хотите установить orderID как идентификатор в базе данных. Затем используйте следующую функцию для получения идентификатора

DatabaseReference reference = FirebaseDatabase.getInstance().getReference("Orders");
String id = reference.push().getKey();

и установите для этого идентификатора значение id в базе данных с помощью

    HashMap<String,Object> hashMap = new HashMap<>();
    hashMap.put("id",id);
    hashMap.put("sender",sender);
    hashMap.put("date",date);
    hashMap.put("model",model);
    hashMap.put("adress",adress);
    hashMap.put("problem",problem);

, а затем вставьте весь набор данных в базу данных с помощью

reference.child(id).setValue(hashMap);
0 голосов
/ 04 апреля 2020

Если вы хотите, чтобы push() также было значением атрибута id, вы можете попробовать следующее:

private void  saveOrderInformation(String id, String sender, String date, String model, String adress, String problem){

    DatabaseReference reference = FirebaseDatabase.getInstance().getReference();
    String key = reference.child("Orders").push().getKey();

    HashMap<String,Object> hashMap = new HashMap<>();
    hashMap.put("id",key);
    hashMap.put("sender",sender);
    hashMap.put("date",date);
    hashMap.put("model",model);
    hashMap.put("adress",adress);
    hashMap.put("problem",problem);
    reference.child("Orders").child(key).setValue(hashMap);  
   }

Вы можете получить значение push(), используя getKey() и затем вы можете присвоить его id и использовать его в качестве справочного при настройке значения.

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