Не удалось десериализовать объект. Не удалось преобразовать значение типа java .lang.String в метку времени (находится в поле «время») - PullRequest
0 голосов
/ 01 марта 2020

Я получаю данные из коллекции в 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);
            }
        });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...