gpt4 book ai didi

java - 按时间戳按升序排列 Firestore 数据

转载 作者:塔克拉玛干 更新时间:2023-11-02 22:10:57 25 4
gpt4 key购买 nike

我将应用程序发布的想法存储在 Firestore 中。数据像这样存储在 Firestore 中 Ideas/{documentID}/IdeaObject。问题是当我检索数据时,它没有按发布时间排序。检索到的想法是根据 Firestore 自动创建的 documentID 的 id。我在我的模型类中使用了 ServerTimestamp 并且当我检索它时,我将 orderBy 方法与我的 Firestore 引用一起使用,但仍然没有。

想法.java

public class Idea {
@ServerTimestamp
private Date date;
private String title, idea, timeCommitment, ideaStage, postedBy, website, videoPitch;
private int views, favorites;
private ArrayList<String> lookingFor = new ArrayList<>();
private ArrayList<String> tags = new ArrayList<>();
private String userID;
private String timeStamp;

public Idea() {
}

public Idea(String title, String idea, String timeCommitment, String ideaStage, String postedBy, String website, String videoPitch, int views, int favorites, ArrayList<String> lookingFor, ArrayList<String> tags, String userID, String timeStamp) {
this.title = title;
this.idea = idea;
this.timeCommitment = timeCommitment;
this.ideaStage = ideaStage;
this.postedBy = postedBy;
this.website = website;
this.videoPitch = videoPitch;
this.views = views;
this.favorites = favorites;
this.lookingFor = lookingFor;
this.tags = tags;
this.userID = userID;
this.timeStamp = timeStamp;
}

想法发布方法

  private void postIdea() {

final String ideaID = UUID.randomUUID().toString();
final SimpleDateFormat sdf = new SimpleDateFormat("yyyy.MM.dd.HH.mm.ss");
Timestamp timestamp = new Timestamp(System.currentTimeMillis());


Idea ideas = new Idea(title, idea, timeCommitment, ideaStage, AppValues.fullName, website, videoPitch, 0, 0, lookingFor, tags, AppValues.userId, "" + timestamp.getTime());

firestoreDb.collection("ideas")
.document(ideaID)
.set(ideas)
.addOnSuccessListener(new OnSuccessListener<Void>() {
@Override
public void onSuccess(Void aVoid) {
postIdeaUser(ideaID);
}
})
.addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
hideLoadingDialog();
showToast(e.getMessage());
}
});
}

按时间检索所有想法

   firestoreDb.collection("ideas")
.orderBy("timeStamp", Query.Direction.ASCENDING)
.get()
.addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() {
@Override
public void onComplete(@NonNull Task<QuerySnapshot> task) {
if (task.isSuccessful()) {

ideaArrayList = new ArrayList<>();
ideaArrayList.clear();

for (DocumentSnapshot documentSnapshot : task.getResult()) {
Idea idea = documentSnapshot.toObject(Idea.class);
if (!idea.getUserID().equals(AppValues.userId)) {
ideaArrayList.add(idea);
}
}

callAdapter();

} else {
Log.d(TAG, "Error getting documents: ", task.getException());
progressBar.setVisibility(View.GONE);
swipeRefresh.setEnabled(true);
errorText.setVisibility(View.VISIBLE);
}
}
});

我想要实现的是检索所有想法并让它们按 TimeStamp 值升序排列。

最佳答案

在查询数据库时,您不能使用字符串 (timeStamp) 而不是日期 (date) 并期望其行为与日期相同。所以要解决这个问题,请更改以下代码行:

firestoreDb.collection("ideas")
.orderBy("timeStamp", Query.Direction.ASCENDING)

firestoreDb.collection("ideas")
.orderBy("date", Query.Direction.ASCENDING)

要使其工作,这种查询需要一个索引。要创建一个,请查看我在以下帖子中的回答:

关于java - 按时间戳按升序排列 Firestore 数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50224638/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com