当前位置: 首页 > 知识库问答 >
问题:

如果我在其中使用变量,则实时数据库endAt方法不起作用

盖高畅
2023-03-14
"Posts" : {
"-MnLFAlhayTv80FxzUfL" : {
  "description" : "",
  "picture" : "",
  "postKey" : "-M",
  "timeStamp" : 1635682139495,
  "title" : "",
  "userId" : "",
  "userPhoto" : ""
},
"-MnLFzItc050Sn0EtDho" : {
  "description" : "",
  "picture" : "",
  "postKey" : "-M",
  "timeStamp" : 1635682350531,
  "title" : "",
  "userId" : "b",
  "userPhoto" : ""
},

这是我的数据结构。我将使用orderbyChild(timeStamp).endat()方法创建一个删除旧帖子的代码,当我只试验长变量如1635682350531 this->>orderbyChild(timeStamp).endat(1635682350531L)时;当我把l加到1635682350531时,它就可以工作了

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();
                    }
                });
    }

共有1个答案

姜经武
2023-03-14

使用以下查询时:

Query queryByTimestamp = db.child("Posts").orderByChild("timeStamp").endAt(ttime);

需要索引。因此最有可能的是以下log语句:

Log.d("TAG", task.getException().getMessage());

生成以下错误消息:

{
  "rules": {
    "Posts": {
      ".indexOn": "timeStamp",
      ".read": true,
      ".write": true
    }    
  }
}

为了让它起作用。设置此索引后,查询将返回预期结果和以下代码行:

ds.getRef().removeValue();

将从数据库中删除两个子级。

 类似资料:
  • 我的意思是当我使用“字符串”,“int”等关键字创建一个istance变量时。我能想象出那个变量。但当我使用类名创建实例变量时,我无法在脑海中想象任何东西。 谢谢你的关心

  • 我使用useEffects在反应功能组件中获取数据,它必须在data(useState)中获取数据,所以问题是页面加载正确,在api res中没有问题。

  • 版本信息 角度:1.5.8火基:3.2.1角度:2.0.1 测试用例 预期行为 创建具有指定起点的查询。 实际行为

  • 我有一个使用Firebase SimpleLogin的应用程序,但由于我有额外的用户数据,我将其存储在[my-fire base]下。firebaseio.com/users/[用户名]。下面的片段显示了它是如何完成的 由于每个单独用户的数据都是基于用户名我通过uid优先排序的,因此我可以稍后通过uid获取其他用户数据。 当firebase登录事件触发时,我有以下处理程序,负责查询firebase

  • 我尝试使用pg_dump命令导出PostgreSQL数据库(数据库名ari_company): 然后我得到了这个错误: 但当我运行默认数据库(postgres)时,它会工作并转储。sql被创建。使用命令

  • Firebase实时数据库即使在我使用. ush()方法时也会覆盖我在某个位置的数据。我对写入Firebase实时数据库知之甚少的是,写入Firebase实时数据库可以通过几种方式完成。其中最突出的两个是 set()和2。推送()方法。 长话短说,push()用于为要写入的数据创建新键,并将数据添加到节点。 很好,在我之前的项目中,Firebase一直在和我合作,但在这个项目中,我不知道发生了什么