【问题标题】:Retrieve data with FirebaseDatabase使用 FirebaseDatabase 检索数据
【发布时间】:2016-07-14 00:00:05
【问题描述】:

我使用 firebase 数据库,在我的应用程序中我将一些数据放入数据库中,但问题是我没有检索这些数据。 使用此代码,我希望使用唯一用户名进行注册,但是当我将数据放入我的注册活动时,具有相同用户名的信息会更新。 在代码的开头,FirebaseDatabase database is equal to "null" 但我不明白为什么。

我的 Firebase 数据结构:

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;
    }


}

提前感谢您的帮助。

【问题讨论】:

  • 能否也包括您的 Firebase 结构?
  • 我已经添加了我的数据结构
  • 尝试预先设置valueEventListener,并赋值给全局ArrayList,然后检查用户是否在ArrayList中。

标签: java android database firebase firebase-realtime-database


【解决方案1】:

我找到了解决办法:

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";
    }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-08-29
    • 1970-01-01
    • 2010-10-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多