2017-07-01 3 views
0

値のイベントリスナーはすべてのアクティビティで正常に動作します。しかし、私のサインアップ活動では2分以上かかります。どうしてか分かりません。Firebase Valueeventlistenerに時間がかかります

これは、ここに私の方法

private void verifyuserinput() { 


     System.out.println("Verifying User Input"); 
     userRef.addListenerForSingleValueEvent(new com.google.firebase.database.ValueEventListener() { 
      @Override 
      public void onDataChange(com.google.firebase.database.DataSnapshot dataSnapshot) { 
       System.out.println("Verifying Username"); 

       if (dataSnapshot.hasChild(username.getText().toString())){ 
        Toast.makeText(Signup.this, "Username doesn't exist", Toast.LENGTH_SHORT).show(); 
       } 

      } 

      @Override 
      public void onCancelled(DatabaseError databaseError) { 

      } 
     }); 


    } 

ですが、私の完全なサインアップコード https://pastebin.com/fidvpRLE

で両方の印刷物との間の時間差は、それほど多くのデータを消費するものを2分にも2分+

です。毎秒1MBpsのように2分間一定。

ログイン

07-01 21:56:25.315 21504-21504/com.aye.chat I/System.out: Verifying User Input 
07-01 21:58:01.960 21504-21504/com.aye.chat I/System.out: Verifying Username 

時間差があります。

そして、firebaseの参照には、子としてのユーザー名とそのすべての情報のみが含まれています。だから、私はちょうど、ユーザー名が存在するかどうかをチェックしたい。

私が言ったように、このクラス以外はどこでも正常に動作します。 助けが必要です..

答えて

2

この特定のユーザーが存在するかどうかを確認するには、userRefの下のすべてのデータをダウンロードしています。これは無駄で悪化します。ユーザーが増えるとデータが無駄になります。

特定のユーザーが存在することを確認するには、単一のユーザーノードだけを読み取る必要があるソリューションを探す必要があります。行うことができ、あなたの現在のコード、見てから:

userRef.child(username.getText().toString()).addListenerForSingleValueEvent(new com.google.firebase.database.ValueEventListener() { 
    @Override 
    public void onDataChange(com.google.firebase.database.DataSnapshot dataSnapshot) { 
     System.out.println("Verifying Username"); 

     if (dataSnapshot.exists()){ 
      Toast.makeText(Signup.this, "Username doesn't exist", Toast.LENGTH_SHORT).show(); 
     } 

    } 

    @Override 
    public void onCancelled(DatabaseError databaseError) { 
     throw databaseError.toException(); // don't ignore errors 
    } 
}); 

上記のコードは、あなたがチェックしようとしている正確ノードで、JSONツリー内の1レベル下のリスナーを添付します。これにより、O(n)からO(1)に変更されます。

コード内の状態が反転しているように見えます。データが示すとおりにユーザーが存在しないことを印刷します。しかし、同じロジックがあなたのスニペットにあったので、私はそれを変更しないままにすることに決めました。

+0

ありがとうございます... – Kim

関連する問題