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

如果我在其中使用变量,则实时数据库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被创建。使用命令

  • 问题内容: 我想要一段代码,如果它不存在,则在范围内创建一个变量,如果它已经存在,则访问该变量。我需要它是 相同的 代码,因为它将被多次调用。 但是,Tensorflow需要我指定是要创建还是重用该变量,如下所示: 我怎样才能弄清楚是自动创建还是重用它?即,我希望以上两个代码块 相同, 并运行程序。 问题答案: 创建新变量且未声明形状时,或在变量创建过程中违反重用时,将引发A。因此,您可以尝试以下