假设我正在使用这样的POJO:

public class Pojo {
    String name;
    //Others
    Map<String, String> time; //As this is a Map<String,String>
    //Constructors, getters, setters etc.
}


现在我要上传到firebase

Button b = findViewById(R.id.button_upload);
b.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {
        Pojo pojo = new pojo;
        pojo.setName(getName());
        pojo.setTimeStamp(ServerValue.TIMESTAMP); //Is this right?
        String id = pojoFirebaseDatabase.push().getKey();
        shortcut.setId(id);
        shortcutDatabase.child(id).setValue(pojo);
    }
}


这些对我来说似乎都是正确的。但是当我在实时数据库中看到时,我发现其中只有一个长("time" : 123456789)。 Map<String,String>如何更改为long?

另外,当我尝试恢复我的pojo时(我正在使用Firebase-UI):

fbUIRecyclerAdapter =
    new FirebaseRecyclerAdapter<Pojo, PojoViewHolder>(myOptions) {
    @Override
    public PojoViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View v = LayoutInflater.from(parent.getContext())
            .inflate(R.layout.pojo_view, parent, false);
        return new PojoViewHolder(v);
    }

    @Override
    protected void onBindViewHolder(PojoViewHolder pView, int position, Pojo pojo) {
        pView.setName(pojo.getName());
        shortcutView.setTimestamp(shortcut.getTimeStamp());
    }


我有一个例外:

com.google.firebase.database.DatabaseException: Expected a Map while deserializing, but got a class java.lang.Long

对我来说似乎足够合理。因为数据库中只有很长的一段,但是我要在我的Map<String, String>中要求一个Pojo.class

那么我该如何解决呢?如何在我的Pojo对象中获取较长的时间以根据需要使用它?

最佳答案

1.将地图添加到您的代码Map<String, String> time = new HashMap<>();

2.将值放入地图time.put("time",ServerValue.TIMESTAMP);

3.设置为Pojo pojo.setTimeStamp(time);

尝试这个 。

    // add map
    Map<String, String> time = new HashMap<>();
    time.put("time",ServerValue.TIMESTAMP);
    // edited here ,change Pojo
    Pojo pojo = new Pojo();
    pojo.setName(getName());
    // edited here
    pojo.setTimeStamp(time);

10-07 19:47
查看更多