[解決済み] FirestoreのデータをTimeStampで昇順に並べる。
2022-02-07 15:43:52
質問事項
アプリケーションから投稿されたIdeasをFirestoreに保存しています。データは以下のようにFirestoreに保存されています。
Ideas/{documentID}/IdeaObject
. 問題は、データを取得したときに、投稿された時間順に並べ替えられないことです。取得されたアイデアは、Firestoreによって自動的に作成されたdocumentIDのidに従って格納されています。私は
サーバータイムスタンプ
をモデルクラスで使用し、さらにそれを取得する際に
orderBy
メソッドに Firestore の参照を指定しても、何も起こりません。
Idea.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)
この種のクエリを動作させるためには、インデックスが必要です。インデックスを作成するには、次の投稿の私の回答を確認してください。
関連
-
[解決済み】リンクリストの負の値の数でnegativeCntrを代入する
-
[解決済み】 JAVA 変数宣言はここではできない
-
[解決済み】スレッド "main "での例外 java.util.NoSuchElementException
-
[解決済み】intがnullであるかどうかを確認する方法
-
[解決済み] JavaScriptでタイムスタンプを取得する方法は?
-
[解決済み] MySQLでdatetimeとtimestampのどちらのデータ型を使用すべきですか?
-
[解決済み] Androidアプリケーションのアクティビティ間でデータを受け渡すにはどうすればよいですか?
-
[解決済み] Git で古いコミットのタイムスタンプを変更するにはどうしたらいいですか?
-
[解決済み] C#でunixのタイムスタンプを取得する方法
-
[解決済み] bashスクリプトでtimestamp変数を作成する
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】リンクリストの負の値の数でnegativeCntrを代入する
-
[解決済み】Android Studio クラス org.codehaus.groovy.runtime.InvokerHelper を初期化できませんでした。
-
[解決済み】"比較メソッドはその一般契約に違反する!"
-
[解決済み】エラー「No enclosing instance of type Foo is accessible」の原因と修正方法について教えてください。
-
[解決済み】"|="の意味は何ですか?(パイプ等号演算子)
-
[解決済み】ResultSetの例外 - 結果セットの開始前
-
[解決済み] 二項演算子「&」のオペランド型がおかしい java
-
[解決済み] 解決済み】Javaが「型をインスタンス化できない」というエラーを返す [重複] [重複]
-
[解決済み】Eclipseがエラーメッセージ "Java was started but returned exit code = 1" を返す
-
[解決済み】フォルダに書き込もうとすると「java.nio.file.AccessDeniedException」が発生する件