首页 > 解决方案 > android studio的以下代码中的错误是什么

问题描述

我程序的这一部分是将当前时间添加到我的云存储中。该应用程序的工作原理是程序的这一部分。每当我尝试运行这部分程序时,应用程序都会停止运行,并且我的数据库中没有任何变化。

 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: unknown buffer: 0x7f1108012880 D/OpenGLRenderer: endAllStagingAnimators on 0x7f10fc596c00 (DropDownListView) with handle 0x7f110b0fcce0 D/EGL_emulation: eglMakeCurrent: 0x7f10fd15db60: ver 3 1 (tinfo 0x7f11078e2ba0) D/AndroidRuntime: Shutting down VM E/AndroidRuntime: FATAL例外:主进程:com.example.guardchecker,PID:3684 java.lang.IllegalArgumentException:无效数据。数据必须是 Map 或合适的 POJO 对象,但它的类型为: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 :

标签: javaandroidgoogle-cloud-firestore

解决方案


Firestore 是一个集合/文档数据库,您只能将值存储在文档的字段中。问题是您尝试在 Cloud Firestore 文档中存储单个值,但文档必须始终具有键值对。

因此,您需要确定要将 currentTime 存储在哪个字段中,然后传递一个键值对。例如

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

在上面的片段中,您将看到我们将您要存储的值与键一起放入映射中time,然后将该键值对存储在数据库中。


推荐阅读