Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/185.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Firebase查询不支持';他似乎在安道尔工作_Java_Android_Firebase_Firebase Realtime Database - Fatal编程技术网

Java Firebase查询不支持';他似乎在安道尔工作

Java Firebase查询不支持';他似乎在安道尔工作,java,android,firebase,firebase-realtime-database,Java,Android,Firebase,Firebase Realtime Database,当我试图查询我的用户名字段以检查它是否已经存在于数据库中时,我在firebase数据库中面临一个非常棘手的问题。它之前还在工作,但突然停止了工作。。。这是我的密码: Query query = myRef.child(getString(R.string.usersNode)).orderByChild("user_name").equalTo("codeni8"); query.addListenerForSingleValueEvent(new ValueEventList

当我试图查询我的用户名字段以检查它是否已经存在于数据库中时,我在firebase数据库中面临一个非常棘手的问题。它之前还在工作,但突然停止了工作。。。这是我的密码:

 Query query = myRef.child(getString(R.string.usersNode)).orderByChild("user_name").equalTo("codeni8");
        query.addListenerForSingleValueEvent(new ValueEventListener() {
            @Override
            public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                if(dataSnapshot.exists()){
                    Log.d(TAG,"username already exist");
                }else {
                    Log.d(TAG,"username does't exist");
                }
            }
            @Override
            public void onCancelled(@NonNull DatabaseError databaseError) {

            }
        });
我不知道为什么,但每次我运行它。它说“用户名不存在”,即使它实际上存在于数据库中

我不知道该怎么办。我想问题开始了 当我将firebase依赖项更新为“16.0.5”时

以下是我的users类数据模型:

    public class Users {

    private String user_id;
    private String user_name;
    private String display_name;
    private String email;
    private String profile_photo;
    private String cover_photo;
    private String bio;
    private String website;
    private long posts;
    private long followers;
    private long following;
    private String phone_no;
    private String gender;


    public Users() {
    }

    public Users(String user_id, String user_name, String display_name, String email, String profile_photo, String cover_photo, String bio, String website, long posts, long followers, long following, String phone_no, String gender) {
        this.user_id = user_id;
        this.user_name = user_name;
        this.display_name = display_name;
        this.email = email;
        this.profile_photo = profile_photo;
        this.cover_photo = cover_photo;
        this.bio = bio;
        this.website = website;
        this.posts = posts;
        this.followers = followers;
        this.following = following;
        this.phone_no = phone_no;
        this.gender = gender;
    }


    public String getUser_id() {
        return user_id;
    }

    public void setUser_id(String user_id) {
        this.user_id = user_id;
    }

    public String getUser_name() {
        return user_name;
    }

    public void setUser_name(String user_name) {
        this.user_name = user_name;
    }

    public String getDisplay_name() {
        return display_name;
    }

    public void setDisplay_name(String display_name) {
        this.display_name = display_name;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    public String getProfile_photo() {
        return profile_photo;
    }

    public void setProfile_photo(String profile_photo) {
        this.profile_photo = profile_photo;
    }

    public String getCover_photo() {
        return cover_photo;
    }

    public void setCover_photo(String cover_photo) {
        this.cover_photo = cover_photo;
    }

    public String getBio() {
        return bio;
    }

    public void setBio(String bio) {
        this.bio = bio;
    }

    public String getWebsite() { return website; }

    public void setWebsite(String website) { this.website = website; }

    public long getPosts() {
        return posts;
    }

    public void setPosts(long posts) {
        this.posts = posts;
    }

    public long getFollowers() {
        return followers;
    }

    public void setFollowers(long followers) {
        this.followers = followers;
    }

    public long getFollowing() {
        return following;
    }

    public void setFollowing(long following) {
        this.following = following;
    }

    public String getPhone_no() {
        return phone_no;
    }

    public void setPhone_no(String phone_no) {
        this.phone_no = phone_no;
    }

    public String getGender() {
        return gender;
    }

    public void setGender(String gender) {
        this.gender = gender;
    }
}
更新: 我在“用户名”字段中收到以下警告:

使用一个未指定的索引。您的数据将在客户端上下载和过滤。考虑添加“.index”:用户的“用户名称”到您的安全和FixBASE数据库规则以获得更好的性能“< /P>” 这是问题的根源吗??如何添加indexOn

问题已解决:
我认为“.indexOn”是问题所在,而且我使用了firebase脱机功能,忘记了同步特定节点,我只是执行了“nodeRefrence.keepSynced(true)”操作,现在一切都正常了。

以这种方式将id传递到查询中

 String userId = mFirebaseDatabase.push().getKey();
myRef.child(getString(R.string.usersNode)).child(userId).orderByChild("user_name").equalTo("codeni8");
试试这个方法这对我很有效

 private void initView() {
    mFirebaseInstance = FirebaseDatabase.getInstance();
    mDatabase = mFirebaseInstance.getReference("usersDb/UserTable");

    mRvData = findViewById(R.id.rvData);
    mTvEmpty = findViewById(R.id.dlTvEmpty);
    mRvData.setLayoutManager(new LinearLayoutManager(this));
    mDatabase.addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            mUserList.clear();
            for (DataSnapshot dataSnapshot1 : dataSnapshot.getChildren()) {
                // here check id that available or not into db.
                User user = dataSnapshot1.getValue(User.class);

                mUserList.add(user);
            }
            allDataAdapter = new DisplayAllData(DisplayActivity.this, mUserList);
            mRvData.setAdapter(allDataAdapter);
            allDataAdapter.notifyDataSetChanged();
            if (mUserList.isEmpty())
                mTvEmpty.setVisibility(View.VISIBLE);
            else
                mTvEmpty.setVisibility(View.GONE);
        }


        @Override
        public void onCancelled(DatabaseError databaseError) {

        }
    });

}
更多信息请参阅此链接

根据您编辑的问题:

使用一个未指定的索引。您的数据将在客户端上下载和过滤。考虑添加“.index”:用户的“用户名称”到您的安全和FixBASE数据库规则以获得更好的性能“< /P>” 听起来您可能没有在要查询的字段上定义索引。如果没有索引,则无法在服务器上执行筛选。因此,在这种情况下,服务器将所有数据发送到客户端,客户端执行过滤

这是问题的根源吗?如何添加indexOn

如果这确实是问题的原因,您可以通过在规则文件中添加索引来修复它。知道您正在对名为
user\u name
的属性上的
users
节点进行排序,您应该使用以下代码行:

{
  "rules": {
    "users": {
      ".indexOn": "user_name"
    }
  }
}

有关此主题的更多信息,我建议您查看有关的官方文档。

我不只是在特定uid中搜索wana。我想在整个数据库中搜索这个用户名…我添加了一个方法initview()检查这个方法它的帮助是否完整。这很奇怪,从现在开始它一直在发生,或者它只是第一次发生?不总是…在同一个应用程序中,它工作了,但在将firebase依赖性更新为16.0.5之后,它似乎不工作。
myRef
的值是多少?
getString(R.string.usersNode)
返回什么?请同时回复@AlexMamo@AlexMamomyRef是数据库的根引用,usersNode是节点“users”。您是否尝试打印
dataSnapshot
的内容?里面的数据是什么?我更新了我的rulles:{/*访问以了解更多关于安全规则的信息。*/“规则”:{.read:“auth!=null”,“write:“auth!=null”,“users:{.indexOn:[“user\u name”,“email”]}}}。但是问题仍然是坚持只使用这个
。.indexOn:“user\u name”
,它是这样工作的吗?这是不起作用的,但是这个警告>代码>使用一个未指定的索引。您的数据将在客户端上下载和过滤。考虑添加“.index”:“用户名称”< /代码>它仍然显示。警告很好地听到,另一个问题得到解决,但仍然不是最初的问题。