2017-04-07 75 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()); 

您可以编写动态我只是举一个例子。