Я получаю данные из коллекции в Firestore для загрузки в представление моего переработчика
@Override
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
db = FirebaseFirestore.getInstance();
FirebaseFirestoreSettings settings = new
FirebaseFirestoreSettings.Builder().setTimestampsInSnapshotsEnabled(true).build();
db.setFirestoreSettings(settings);
simpleDate = new SimpleDateFormat("EEEE, MMMM dd, yyyy h:mm a"); //monday, May 05, 2020 1:20 pm
Query query = db.collection("Chat")
.document("Room1")
.collection("Room1Chat")
.orderBy("time");
FirestoreRecyclerOptions<ChatModel> options = new FirestoreRecyclerOptions
.Builder<ChatModel>()
.setQuery(query, ChatModel.class)
.build();
adapter = new FirestoreRecyclerAdapter<ChatModel, ChatViewHolder>(options) {
//link to layout
//load data to TextViews in layout
try{
//load other data
holder.list_time.setText(simpleDate.format(model.getTime().toDate()));
}catch(Exception e){
System.out.println(e.getMessage());
}
};
}
Как я отправляю данные в Firestore
sendBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
FieldValue time = FieldValue.serverTimestamp();
Map<String, Object> sendMsg = new HashMap<>();
//sendMsg.put other data
sendMsg.put("time", time);
db.collection("Chat").document("Room1").collection("Room1Chat").document().set(sendMsg);
}
});
Вот мой ChatModel. java
public class ChatModel {
private String msg;
private String name;
private Timestamp time;
private String colour;
private String ImageUrl;
private ChatModel(){
}
private ChatModel(String name,String msg,Timestamp time,String colour){
this.name=name;
this.msg=msg;
this.time=time;
this.colour=colour;
}
public Timestamp getTime(){
return time;
}
public void setTime(Timestamp time){
this.time=time;
}
//getter & setter for other data
затем я получаю
java.lang.RuntimeException: Could not deserialize object. Failed to convert value of type java.lang.String to Timestamp (found in field 'time')
Данные в моем Firestore
Я пытался удалить данные в Firestore, а также воссоздали коллекцию, вложенную в Room1, которая также возвращает ту же ошибку, однако, когда я создаю новую вложенную коллекцию с другим именем Пример. (Room1Chat2), отправляя сообщение и извлекая его из этого места, он загружает все с небольшим задержка показа метки времени.
Query query = db.collection("Chat")
.document("Room1")
.collection("Room1Chat2")
.orderBy("time");
sendBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
FieldValue time = FieldValue.serverTimestamp();
Map<String, Object> sendMsg = new HashMap<>();
//sendMsg.put other data
sendMsg.put("time", time);
db.collection("Chat").document("Room1").collection("Room1Chat2").document().set(sendMsg);
}
});