2017-04-07 4 views
0

ユーザーが特定のチームのメンバーであるかどうかを確認したい場合は、ユーザーが参加しない場合は参加依頼し、そうであれば彼はページ。私は同様の質問のいくつかを見つけましたが、どういうわけか私はまだデータベースにユーザーを追加できませんでした。以下は私のコードであり、リストの1つをクリックするたびにこのコードがクラッシュする。Firebase - データが存在するかどうかを確認して追加します

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場合、ユーザーの電子メールが、データベース内に存在する場合、それはチェックしますユーザーのメールをteamMemberとして追加します。チームを作成したユーザーを追加できますが、後で参加したいユーザーを追加できないようです。誰かが私を助けることができたら本当に感謝します。情報が不足している場合はお知らせください。

答えて

1

Firebaseはキーに.(ドット)記号を受け入れないという問題があります。したがって、電子メールアドレスを使用するには、エンコード方法が必要です。あなたのケースでは、電子メールアドレスは[email protected]の代わりに[email protected],com,のコンマを参照)でなければなりません。これらは電子メールアドレスをエンコードしてデコードする方法です。

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

この方法で問題が解決されます。

+0

これらの方法はどこに置く必要がありますか?コードのどこに?申し訳ありませんが、エンコード/デコード方法の使い方はわかりません。 – Zephyros

+0

これらのコードをどのように使うべきか私に説明してください。 – Zephyros

+0

必要な活動やヘルパークラスでの活動。 –

1

あなたの問題を明確にlogcatに記載されている: ''

Firebaseデータベースのパスが含まれていなければなりません、 '#'、 '$'、 '['、または ']'

「@」は受け付けていないと思う。ユーザーをDBに追加する適切な方法は、ユーザー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データベースのパスは含めることはできません '' 、 '#'、 '$'、 '['、 ']'

あなたのコードも見ています。このようにfirebase Queryを書くことができます。

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

私はちょうど例を挙げています。

関連する問題