Esta parte do meu programa é adicionar o tempo atual para o meu firestore nuvem. O aplicativo funciona, exceto esta parte do programa. Sempre que eu tento executar esta parte do programa, o aplicativo pára de funcionar e não há nenhuma mudança no meu banco de dados.
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 / superfície: getSlotFromBufferLocked: tampão desconhecido: 0x7f1108012880 D / OpenGLRenderer: endAllStagingAnimators sobre 0x7f10fc596c00 (DropDownListView) com punho 0x7f110b0fcce0 D / EGL_emulation: eglMakeCurrent: 0x7f10fd15db60: ver 3 1 (tinfo 0x7f11078e2ba0) D / AndroidRuntime: desligando VM E / AndroidRuntime: FATAL EXCEÇÃO: Processo principal: com.example.guardchecker, PID: 3684 java.lang.IllegalArgumentException: dados inválidos. Os dados devem ser um mapa ou um objeto POJO adequado, mas foi do tipo: java.lang.String em com.google.firebase.firestore.UserDataReader.convertAndParseDocumentData (com.google.firebase: firebase-Firestore @@ 21.4.1: 234) em com.google.firebase.firestore.UserDataReader.parseSetData (com.google.firebase: firebase-firestore @@ 21.4.1: 75) em com.google.firebase.firestore.DocumentReference.set (com.google.firebase : firebase-firestore @@ 21.4.1: 166) em com.
Firestore é um banco de dados de coleta / documento, onde você só pode armazenar um valor em um campo em um documento. O problema é que você está tentando armazenar um único valor em um documento Nuvem Firestore, mas um documento deve ter sempre pares chave-valor.
Então você vai precisar para determinar qual campo você deseja armazenar currentTime e, em seguida, passar um par de valor-chave. Por exemplo
Map<String, Object> values = new HashMap<>();
values.put("time", currentTime);
dbr.add(values);
No fragmento acima, você verá que nós colocamos o valor que deseja armazenar em um mapa com uma chave time
e, em seguida, armazenar esse par de valor-chave no banco de dados.