如何确保查询不是空的 [英] how to make sure Query is not empty

查看:112
本文介绍了如何确保查询不是空的的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个像普通用户,PremiumUser



等许多类型的用户的应用程序,并且为了定义我使用firebasedatabase中的唯一UID到他们的类别高级或正常

这是我的数据库firebase形状

   - 用户
-----正常
-----保费

所以如果用户选择普通账户,他将被分配到正常状态。对于我来说,这是如何在他登录后如何抓取他的数据如下

  if(auth.getCurrentUser()!= null){
finish();
Query q = FirebaseDatabase.getInstance()。getReference()。child(users)。child(normal)。equalTo(auth.getCurrentUser()。getUid());
Query q2 = FirebaseDatabase.getInstance()。getReference()。child(users)。child(premium)。equalTo(auth.getCurrentUser()。getUid());
if(q!= null){
q.addValueEventListener(new ValueEventListener(){
@Override
public void onDataChange(DataSnapshot dataSnapshot){
startActivity(new Intent(Login.this,Normal.class));
}

@Override
public void onCancelled(DatabaseError databaseError){

}
});
} else {
q2.addValueEventListener(new ValueEventListener(){
@Override
public void onDataChange(DataSnapshot dataSnapshot){
startActivity(new Intent(Login.this ,Premium.class));
}

@Override
public void onCancelled(DatabaseError databaseError){


});






$ b

但是看起来像代码同时进入两个活动这个帐户只存在于其中一个类别(正常或溢价)

我试过使用

 < (dataSnapshot!= null)//两个Activites仍然输入
if(dataSnapshot.getValue (Premium.class)!= null)// vvvv
if(dataSnapshot.getValue(Normal.class)!= null)//但仍然没有输入
$ b $我也试过
$ b $ pre $ 查询q = FirebaseDatabase.getInstance() 。.getReference()子( 用户)子( 正常)equalTo(auth.getCurrentUser()的getuid());
final Query q2 = FirebaseDatabase.getInstance()。getReference()。child(users)。child(premium)。equalTo(auth.getCurrentUser()。getUid());
q.addValueEventListener(new ValueEventListener(){
public void onDataChange(DataSnapshot dataSnapshot){$ b $ if(dataSnapshot.exists()){
startActivity(new Intent(Login.this ,Normal.class));
}
else {
q2.addValueEventListener(new ValueEventListener(){
public void onDataChange(DataSnapshot dataSnapshot){
if(dataSnapshot .exists()){
startActivity(new Intent(Login.this,Premium.class));
}

但是也没有输入

如何解决这个问题



谢谢

解决方案

我修改了每个用户的uid然后改变了

  Query q = FirebaseDatabase.getInstance()。getReference()。child(users)。child(normal)。equalTo(auth.getCurrentUser()。getUid )); 
Query q2 = FirebaseDatabase.getInstance()。getReference()。child(users)。child ( 优质)equalTo(auth.getCurrentUser()的getuid()。)。

转换为以下内容:

  Query q = FirebaseDatabase.getInstance()。getReference()。child(users)。child(normal)。orderByChild(uid)。equalTo(auth.getCurrentUser()。getUid )); 
Query q2 = FirebaseDatabase.getInstance()。getReference()。child(users)。child(premium)。orderByChild(uid)。equalTo(auth.getCurrentUser()。getUid()) ;

我还是不知道为什么第一种方法是错误的

i have an application with many types of users like normalUser,PremiumUser

and in order to define that i use their unique UID in firebasedatabase to each one in their category premium or normal

this is my database firebase shape

--users
-----normal
-----premium

so if user choose normal account he will be assigned to normal only

for me this is how to grab his data later when he log in is as follows

if (auth.getCurrentUser() != null) {
        finish();
        Query q = FirebaseDatabase.getInstance().getReference().child("users").child("normal").equalTo(auth.getCurrentUser().getUid());
        Query q2 = FirebaseDatabase.getInstance().getReference().child("users").child("premium").equalTo(auth.getCurrentUser().getUid());
        if (q != null) {
            q.addValueEventListener(new ValueEventListener() {
                @Override
                public void onDataChange(DataSnapshot dataSnapshot) {
                        startActivity(new Intent(Login.this, Normal.class));
                }

                @Override
                public void onCancelled(DatabaseError databaseError) {

                }
            });
        } else {
            q2.addValueEventListener(new ValueEventListener() {
                @Override
                public void onDataChange(DataSnapshot dataSnapshot) {
                        startActivity(new Intent(Login.this, Premium.class));
                }

                @Override
                public void onCancelled(DatabaseError databaseError) {

                }
            });
        }
    }

but looks like the code enter both activities altough for sure this account exists in one of categories only(normal or premium)

i tried using

if (dataSnapshot.getChildrenCount()>0) //none of both activities is entered
if (dataSnapshot != null)//both Activites still entered
if(dataSnapshot.getValue(Premium.class)!=null)//vvvv
if(dataSnapshot.getValue(Normal.class)!=null)//but still none entered

i also tried

Query q = FirebaseDatabase.getInstance().getReference().child("users").child("normal").equalTo(auth.getCurrentUser().getUid());
final Query q2 = FirebaseDatabase.getInstance().getReference().child("users").child("premium").equalTo(auth.getCurrentUser().getUid());
q.addValueEventListener(new ValueEventListener() {
public void onDataChange(DataSnapshot dataSnapshot) {
    if (dataSnapshot.exists()) {
        startActivity(new Intent(Login.this, Normal.class));
    }
    else {
        q2.addValueEventListener(new ValueEventListener() {
            public void onDataChange(DataSnapshot dataSnapshot) {
              if (dataSnapshot.exists()) {
                startActivity(new Intent(Login.this, Premium.class));
            }

but none of them was entered too

how can i fix that

thanks

解决方案

i fixed it by adding to each user a uid then changed

 Query q = FirebaseDatabase.getInstance().getReference().child("users").child("normal").equalTo(auth.getCurrentUser().getUid());
 Query q2 = FirebaseDatabase.getInstance().getReference().child("users").child("premium").equalTo(auth.getCurrentUser().getUid());

to the following

 Query q = FirebaseDatabase.getInstance().getReference().child("users").child("normal").orderByChild("uid").equalTo(auth.getCurrentUser().getUid());
 Query q2 = FirebaseDatabase.getInstance().getReference().child("users").child("premium").orderByChild("uid").equalTo(auth.getCurrentUser().getUid());

i still dont know why the first way is wrong

这篇关于如何确保查询不是空的的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆