火力地堡 - 检查是否存在的数据,并将它们添加
问题描述:
我要检查,如果用户是特定团队的成员,如果用户不是他将被要求加入,如果他是,那么他将被引导到一个页。我确实发现了一些类似的问题,但不知何故,我仍然无法将用户添加到数据库中。下面是我的代码,每当我点击其中一个列表时,此代码就会崩溃。火力地堡 - 检查是否存在的数据,并将它们添加
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)
我的数据库:
当 “恒” 团队的用户点击,它会检查,如果用户的电子邮件存在于数据库中,如果ISN然后它会将用户的电子邮件添加为团队成员。我可以添加创建团队的用户,但似乎无法添加想要稍后加入的用户。真的很感谢有人能帮助我。如果缺乏信息,请告诉我。
答
的问题是,火力地堡不接受在关键.
(点)符号。因此,要使用电子邮件地址,您需要有一种编码方法。电子邮件ADDRES必须[email protected],com
(见,
逗号)在[email protected]代替,因为它是你的情况。这些是编码和解码电子邮件地址的方法。
static String encodeUserEmail(String userEmail) {
return userEmail.replace(".", ",");
}
static String decodeUserEmail(String userEmail) {
return userEmail.replace(",", ".");
}
此方法将解决您的问题。
答
你的问题是在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) {
}
});
}
答
您的问题写您的logcat: ''
火力地堡数据库路径不得包含,'#','$','['或']'
但我也看看你的代码。你可以这样编写Firebase Query。
databaseMembers = FirebaseDatabase.getInstance().getReference("members");
Query q = databaseMembers.orderbyChild("heng").equalTo(user.getEmail());
您可以编写动态我只是举一个例子。
我应该在哪里把这些方法呢?代码中的任何地方?对不起,我不知道如何使用编码/解码方法。 – Zephyros
你介意给我解释我应该如何使用这些代码? – Zephyros
在你需要他们的活动或辅助课堂上。 –