в чем ошибка в следующем коде android studio - PullRequest
0 голосов
/ 22 марта 2020

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

 mreport.setOnClickListener(
                new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
                        String tower = mtower.getSelectedItem().toString();
                        String currentTime = new SimpleDateFormat("HH:mm:ss", Locale.getDefault()).format(new Date());
                        String currentDate = new SimpleDateFormat("dd-MM-yyyy", Locale.getDefault()).format(new Date());

                        CollectionReference dbr = db.collection("tower")
                                .document(tower).collection(currentDate)
                                .document("duty").collection("off");
                                dbr.add(currentTime)
                                .addOnSuccessListener(new OnSuccessListener<DocumentReference>() {
                                    @Override
                                    public void onSuccess(DocumentReference documentReference) {
                                        Toast.makeText(MainActivity.this,"REPORTED SUCCESSFULLY" , Toast.LENGTH_SHORT).show();
                                    }
                                })
                                .addOnFailureListener(new OnFailureListener() {
                                    @Override
                                    public void onFailure(@NonNull Exception e) {
                                        Toast.makeText(MainActivity.this, "EORROR!",Toast.LENGTH_SHORT).show();
                                    }
                                });
                    }
                });

E / Surface: getSlotFromBufferLocked: неизвестный буфер: 0x7f1108012880 D / OpenGLRenderer: endAllStagingAnimators on 0x7f10fc596 (DropDownListView) с дескриптором 0x7f110b0fcce0 D / EGL_emulation: eglMakeCurrent: 0x7f10fd15db60: версия 3 1 (tinfo 0x7f11078e2ba0) D / AndroidRuntime: завершение работы VM E / AndroidRuntime: 36 FATAL EXCEPTION.P: .lang.IllegalArgumentException: неверные данные. Данные должны быть картой или подходящим объектом POJO, но они имели тип: java .lang.String на com.google.firebase.firestore.UserDataReader.convertAndParseDocumentData (com.google.firebase: firebase-firestore @@ 21.4. 1: 234) на com.google.firebase.firestore.UserDataReader.parseSetData (com.google.firebase: firebase-firestore @@ 21.4.1: 75) на com.google.firebase.firestore.DocumentReference.set (com.google .firebase: firebase-firestore @@ 21.4.1: 166) на com.google.firebase.firestore.DocumentReference.set (com.google.firebase: firebase-firestore @@ 21.4.1: 146) на com.google.firebase .firestore.CollectionReference.add (com.google.firebase: firebase-firestore @@ 21.4.1: 121) по адресу com.example.guardchecker.MainActivity $ 1.onClick (MainActivity. java: 67) по android .view .View.performClick (просмотр. java: 5198) в android .view.View $ PerformClick.run (просмотр. java: 21147) в android .os.Handler.handleCallback (обработчик. java : 739) в android .os.Handler.dispatchMessage (Обработчик. java: 95) в android .os.Looper.l oop (Looper. java: 148) в android .a pp.ActivityThread.main (ActivityThread. java: 5417) в java .lang.reflect.Method.invoke (собственный метод) в com. android .internal.os.ZygoteInit $ MethodAndArgsCaller.run (ZygoteInit. java: 726) в com. android .internal.os.ZygoteInit.main (ZygoteInit. java: 616) W / DynamiteModule: класс дескриптора локального модуля для поставщика-установщика не найден.

1 Ответ

1 голос
/ 22 марта 2020

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

Итак, вам нужно определить, в каком поле вы хотите хранить currentTime, а затем передать пару ключ-значение. Например,

Map<String, Object> values = new HashMap<>(); 
values.put("time", currentTime); 
dbr.add(values); 

В приведенном выше фрагменте вы увидите, что мы помещаем значение, которое вы хотите сохранить на карту, с ключом time, а затем сохраняете эту пару ключ-значение в базе данных.

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