2017-04-07 31 views
0

我要檢查,如果用戶是特定團隊的成員,如果用戶不是他將被要求加入,如果他是,那麼他將被引導到一個頁。我確實發現了一些類似的問題,但不知何故,我仍然無法將用戶添加到數據庫中。下面是我的代碼,每當我點擊其中一個列表時,此代碼就會崩潰。火力地堡 - 檢查是否存在的數據,並將它們添加

databaseMembers = FirebaseDatabase.getInstance().getReference("members"); 

listViewTeams.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
     @Override 
     public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) { 
      //getting the selected team 
      Team team = teams.get(i); 
      checkMember(); 


      //creating an intent 
      Intent intent = new Intent(getApplicationContext(), ChatRoomActivity.class); 

      //putting team name and id to intent 
      intent.putExtra(TEAM_ID, team.getTeamId()); 
      intent.putExtra(TEAM_NAME, team.getTeamName()); 

      //starting the activity with intent 
      startActivity(intent); 
     } 
    }); 

private void checkMember(){ 
    FirebaseUser user = firebaseAuth.getCurrentUser(); 
    final String teamMember = user.getEmail(); 
    databaseMembers.addListenerForSingleValueEvent(new ValueEventListener() { 
     @Override 
     public void onDataChange(DataSnapshot dataSnapshot) { 
      if(dataSnapshot.hasChild(teamMember)){ 
       finish(); 
      } 
      else{ 
       databaseMembers.push().setValue(teamMember); 
      } 
     } 

     @Override 
     public void onCancelled(DatabaseError databaseError) { 

     } 
    }); 
} 

的logcat:

04-07 12:44:41.167 19091-19091/com.example.user.stfv2 E/AndroidRuntime: FATAL EXCEPTION: main 
                    Process: com.example.user.stfv2, PID: 19091 
                    com.google.firebase.database.DatabaseException: Invalid Firebase Database path: [email protected] Firebase Database paths must not contain '.', '#', '$', '[', or ']' 
                     at com.google.android.gms.internal.zzbtf.zzjl(Unknown Source) 
                     at com.google.firebase.database.DataSnapshot.hasChild(Unknown Source) 
                     at com.example.user.stfv2.MainActivity$8.onDataChange(MainActivity.java:352) 
                     at com.google.firebase.database.Query$1.onDataChange(Unknown Source) 
                     at com.google.android.gms.internal.zzbpx.zza(Unknown Source) 
                     at com.google.android.gms.internal.zzbqx.zzZS(Unknown Source) 
                     at com.google.android.gms.internal.zzbra$1.run(Unknown Source) 
                     at android.os.Handler.handleCallback(Handler.java:739) 
                     at android.os.Handler.dispatchMessage(Handler.java:95) 
                     at android.os.Looper.loop(Looper.java:148) 
                     at android.app.ActivityThread.main(ActivityThread.java:5417) 
                     at java.lang.reflect.Method.invoke(Native Method) 
                     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726) 
                     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616) 

我的數據庫:

enter image description here

當 「恆」 團隊的用戶點擊,它會檢查,如果用戶的電子郵件存在於數據庫中,如果ISN然後它會將用戶的電子郵件添加爲團隊成員。我可以添加創建團隊的用戶,但似乎無法添加想要稍後加入的用戶。真的很感謝有人能幫助我。如果缺乏信息,請告訴我。

回答

1

的問題是,火力地堡不接受在關鍵.(點)符號。因此,要使用電子郵件地址,您需要有一種編碼方法。電子郵件ADDRES必須[email protected],com(見,逗號)在[email protected]代替,因爲它是你的情況。這些是編碼和解碼電子郵件地址的方法。

static String encodeUserEmail(String userEmail) { 
    return userEmail.replace(".", ","); 
} 
static String decodeUserEmail(String userEmail) { 
    return userEmail.replace(",", "."); 
} 

此方法將解決您的問題。

+0

我應該在哪裏把這些方法呢?代碼中的任何地方?對不起,我不知道如何使用編碼/解碼方法。 – Zephyros

+0

你介意給我解釋我應該如何使用這些代碼? – Zephyros

+0

在你需要他們的活動或輔助課堂上。 –

1

你的問題是在logcat中明確提到: ''

火力地堡數據庫路徑不能包含 '#', '$', '[' 或 ']'

我認爲它甚至不接受'@'。將用戶添加到數據庫中的正確方法是使用用戶uid。

如:

FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser(); 
String uid = user.getUid(); 

在你的代碼,你可以做這樣的事情:

private void checkMember(){ 
    FirebaseUser user = firebaseAuth.getCurrentUser(); 
    final String teamMember = user.getUid(); 
    databaseMembers.addListenerForSingleValueEvent(new ValueEventListener() { 
     @Override 
     public void onDataChange(DataSnapshot dataSnapshot) { 
      if(dataSnapshot.hasChild(teamMember)){ 
       finish(); 
      } 
      else{ 
       databaseMembers.push().setValue(teamMember); 
      } 
     } 

     @Override 
     public void onCancelled(DatabaseError databaseError) { 

     } 
    }); 
} 
0

您的問題寫您的logcat: ''

火力地堡數據庫路徑不得包含,'#','$','['或']'

但我也看看你的代碼。你可以這樣編寫Firebase Query。

databaseMembers = FirebaseDatabase.getInstance().getReference("members"); 
Query q = databaseMembers.orderbyChild("heng").equalTo(user.getEmail()); 

您可以編寫動態我只是舉一個例子。