"Posts" : {
"-MnLFAlhayTv80FxzUfL" : {
"description" : "",
"picture" : "",
"postKey" : "-M",
"timeStamp" : 1635682139495,
"title" : "",
"userId" : "",
"userPhoto" : ""
},
"-MnLFzItc050Sn0EtDho" : {
"description" : "",
"picture" : "",
"postKey" : "-M",
"timeStamp" : 1635682350531,
"title" : "",
"userId" : "b",
"userPhoto" : ""
},
這是我的資料結構。當我試驗像 1635682350531 這樣的長變數時,我將使用 orderbyChild(timeStamp).endAt() 方法制作一個洗掉舊帖子的代碼 ->> orderbyChild(timeStamp).endAt(1635682350531l); 當我將 l 添加到 1635682350531 時它起作用
我定義了當前的時間戳變數并將其放入 endAt 方法,但它不起作用。我可能認為我沒有在變數中添加“l”?
這是我的代碼。
if (UId.equals("k")) {
long tlong = System.currentTimeMillis(); long ttime;
ttime = tlong - 3*24*60*60*1000;
StorageReference picRef = FirebaseStorage.getInstance().getReferenceFromUrl(postImage);
showMessage(String.valueOf(ttime));
picRef.delete()
.addOnSuccessListener(new OnSuccessListener<Void>() {
@Override
public void onSuccess(Void aVoid) {
//image deleted, now delete database
DatabaseReference db = FirebaseDatabase.getInstance().getReference();
Query queryByTimestamp = db.child("Posts").orderByChild("timeStamp").endAt(ttime);
queryByTimestamp.get().addOnCompleteListener(new OnCompleteListener<DataSnapshot>() {
@Override
public void onComplete(@NonNull Task<DataSnapshot> task) {
if (task.isSuccessful()) {
for (DataSnapshot ds : task.getResult().getChildren()) {
ds.getRef().removeValue();
Toast.makeText(PostDetailActivity.this,"???? ???????.",Toast.LENGTH_SHORT).show();
}
} else {
Log.d("TAG", task.getException().getMessage());
Toast.makeText(PostDetailActivity.this,"???? ?????????.",Toast.LENGTH_SHORT).show();
}
}
});
}
})
.addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
//failed, can't go further
Toast.makeText(PostDetailActivity.this, "" e.getMessage(), Toast.LENGTH_SHORT).show();
}
});
}
謝謝你回答我。
uj5u.com熱心網友回復:
當您使用以下查詢時:
Query queryByTimestamp = db.child("Posts").orderByChild("timeStamp").endAt(ttime);
需要一個索引。所以很可能是以下日志陳述句:
Log.d("TAG", task.getException().getMessage());
產生以下錯誤訊息:
索引未定義,添加“.indexOn”:“timeStamp”,路徑“/Posts”,到規則
要解決這個問題,您必須設定以下規則:
{
"rules": {
"Posts": {
".indexOn": "timeStamp",
".read": true,
".write": true
}
}
}
為了讓它發揮作用。有了這個索引,您的查詢將回傳預期結果和以下代碼行:
ds.getRef().removeValue();
將從資料庫中洗掉兩個孩子。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/351481.html
