2016-08-10 22 views
0

我有很多類型的用戶喜歡normalUser的應用,PremiumUser如何確保查詢不爲空

,並以定義我使用他們唯一的UID在firebasedatabase每一個在其類別溢價或正常

這是我的數據庫火力形狀

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

因此,如果用戶選擇正常的帳戶,他將被分配到正常的只有

˚F或者我這是怎麼抓住他的數據後,當他登錄如下

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) { 

       } 
      }); 
     } 
    } 

不過貌似代碼altough肯定只在類別中的一種(正常或溢價)

存在這個賬戶輸入兩個活動

我嘗試使用

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 

我也嘗試

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

BU他們的牛逼沒有被輸入太

我怎樣才能解決這個問題

感謝

回答

0

我固定它通過向每個用戶則UID改變

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

以下

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

我仍然不知道爲什麼,第一種方式是錯誤的

0

您的查詢將永遠是空的,因爲你之前剛剛創建它。沒有附加偵聽器的情況下,無法知道查詢有多少結果。

因此,您可以與您當前的數據結構得到最接近的是嵌套查詢:

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()); 
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) { 
        startActivity(new Intent(Login.this, Premium.class)); 
       } 
       public void onCancelled(DatabaseError databaseError) { 
        throw databaseError.toException(); 
       } 
      }); 
     } 
    } 
    public void onCancelled(DatabaseError databaseError) { 
     throw databaseError.toException(); 
    } 
}); 

更直接的方式來完成這項工作是改變你的數據結構,從而也包含了付款狀態爲每個用戶。所以還存儲:

user_payment_status 
    uid1: "normal" 
    uid2: "premium" 

然後,您可以簡單地查找當前用戶與一個單一的值監聽器的狀態。您將保留當前列表,因爲您可能還想顯示應用中某處所有高級用戶的列表。

以這種方式複製數據在NoSQL數據庫中很常見。

+0

仍然沒有工作我剛剛添加如果(dataSnapshot.exists()){startActivity溢價,以確保 –

+0

旁邊我不能只是說明付款狀態,因爲每個人都會有非常不同的事情幾乎nothi普通 –