2016-07-14 5 views
1

私はfirebaseデータベースを使用しています。私のアプリではデータベースにデータを入れましたが、問題は私がこれらを取得しないことです。 このコードでは、一意のユーザー名で登録しますが、登録アクティビティでデータを入力すると、同じユーザー名の情報が更新されます。 コードの冒頭に、FirebaseDatabase database is equal to "null"がありますが、なぜそれはわかりません。FirebaseDatabaseでデータを取得する

マイfirebaseデータ構造:

enter image description here

Registration.java:

public class Registration extends AppCompatActivity { 
    EditText ET_USER_LOCATION, ET_USER_MAIL, ET_USER_NAME, ET_USER_PASS; 
    String method, user_location, user_mail, user_name, user_pass; 
    Button registerButton; 
    Context mContext; 
    String token = FirebaseInstanceId.getInstance().getToken(); 

    FirebaseDatabase database = FirebaseDatabase.getInstance(); 
    DatabaseReference users = database.getReference("UserApp"); 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_registration); 
     mContext = this; 

     ET_USER_LOCATION = (EditText) findViewById(R.id.new_user_location); 
     ET_USER_MAIL = (EditText) findViewById(R.id.new_user_mail); 
     ET_USER_NAME = (EditText) findViewById(R.id.new_user_name); 
     ET_USER_PASS = (EditText) findViewById(R.id.new_user_pass); 

     registerButton = (Button) findViewById(R.id.registerButton); 

     registerButton.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       user_location = ET_USER_LOCATION.getText().toString(); 
       user_mail = ET_USER_MAIL.getText().toString(); 
       user_name = ET_USER_NAME.getText().toString(); 
       user_pass = ET_USER_PASS.getText().toString(); 


       DatabaseReference name = users.child("user_name"); 
       name.addValueEventListener(new ValueEventListener() { 
        @RequiresApi(api = Build.VERSION_CODES.KITKAT) 
        @Override 
        public void onDataChange(DataSnapshot dataSnapshot) { 
         String user = dataSnapshot.getValue(String.class); 
         if(!Objects.equals(user, user_name)){ 
          writeNewUser(user_name, user_mail, user_pass, user_location, token); 
         } else { 
          Toast.makeText(mContext, "This username is already registered. Try again!", Toast.LENGTH_SHORT).show(); 
         } 
        } 

        @Override 
        public void onCancelled(DatabaseError databaseError) { 

        } 
       }); 

       finish(); 
      } 
     }); 
    } 


    public void userReg(){ 




    } 


    private void writeNewUser(String user_name, String user_mail, String user_pass, String user_location, String user_token) { 
     UserApp user = new UserApp(user_name, user_mail, user_pass, user_location, user_token); 

     users.child(user_name).setValue(user); 
    } 





} 

UserApp.java:

@IgnoreExtraProperties 
public class UserApp { 

    public String user_name; 
    public String user_mail; 
    public String user_pass; 
    public String user_location; 
    public String user_token; 

    public UserApp() { 
     // Default constructor required for calls to DataSnapshot.getValue(User.class) 
    } 

    public UserApp(String user_name, String user_mail, String user_pass, String user_location, String user_token) { 

     this.user_name = user_name; 
     this.user_mail = user_mail; 
     this.user_pass = user_pass; 
     this.user_location = user_location; 
     this.user_token = user_token; 
    } 


} 

ご協力いただきありがとうございます。

+0

をあなたもあなたのFirebase構造をしてください含めることはできますか? –

+0

データ構造体を追加しました – Carlo

+0

事前にvalueEventListenerを設定してグローバルArrayListに割り当てて、そのユーザーがArrayListに含まれているかどうかを確認してください。 –

答えて

0

私は解決策を見つけた:

Registration.java:

public class Registration extends AppCompatActivity { 
    EditText ET_USER_LOCATION, ET_USER_MAIL, ET_USER_NAME, ET_USER_PASS; 
    String method, user_location, user_mail, user_name, user_pass; 
    Button registerButton; 
    Context mContext; 

    FirebaseDatabase database = FirebaseDatabase.getInstance(); 
    DatabaseReference users = database.getReference("UserApp"); 
    String key = users.child("UserApp").push().getKey(); 
    String token = FirebaseInstanceId.getInstance().getToken(); 


    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_registration); 
     mContext = this; 

     ET_USER_LOCATION = (EditText) findViewById(R.id.new_user_location); 
     ET_USER_MAIL = (EditText) findViewById(R.id.new_user_mail); 
     ET_USER_NAME = (EditText) findViewById(R.id.new_user_name); 
     ET_USER_PASS = (EditText) findViewById(R.id.new_user_pass); 

     registerButton = (Button) findViewById(R.id.registerButton); 

     registerButton.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       user_location = ET_USER_LOCATION.getText().toString(); 
       user_mail = ET_USER_MAIL.getText().toString(); 
       user_name = ET_USER_NAME.getText().toString(); 
       user_pass = ET_USER_PASS.getText().toString(); 

       users.addValueEventListener(new ValueEventListener() { 
        @RequiresApi(api = Build.VERSION_CODES.KITKAT) 
        @Override 
        public void onDataChange(DataSnapshot dataSnapshot) { 
         String result = registerWithoutRepetition(dataSnapshot); 
         Toast.makeText(mContext, result, Toast.LENGTH_SHORT).show(); 
         if(Objects.equals(result, "Login Success")){ 
          finish(); 
         } 
        } 

        @Override 
        public void onCancelled(DatabaseError databaseError) { 

        } 
       }); 

      } 
     }); 
    } 





    private void writeNewUser(String user_id, String user_name, String user_mail, String user_pass, String user_location, String user_token) { 
     UserApp user = new UserApp(user_name, user_mail, user_pass, user_location, user_token); 

     users.child(user_id).setValue(user); 
    } 

    @RequiresApi(api = Build.VERSION_CODES.KITKAT) 
    private String registerWithoutRepetition(DataSnapshot dataSnapshot){ 
     for(DataSnapshot snapshot : dataSnapshot.getChildren()) { 
      UserApp userApp = snapshot.getValue(UserApp.class); 
      if (Objects.equals(userApp.user_name, user_name)) { 
       return "Username is already registered, try again"; 
      } 
     } 
     writeNewUser(key, user_name, user_mail, user_pass, user_location, token); 
     return "Login Success"; 
    } 
関連する問題