Метод onDataChange не работает в Android-студии - PullRequest
0 голосов
/ 14 февраля 2019

Я работал над приложением для студии Android и использовал базу данных Firebase в реальном времени.А у меня проблема и прошу помощи .. Имя таблицы в базе данных Hospital и свойства hospital_name, hospital_code, hospital_password, hospital_phone, hospital_email.

Информация добавлена ​​успешно, но проблема в том, что я не смог получить информацию из базы данных (название больницы и код больницы), и я искал и использовал другие способы, но проблема все еще существует.Код должен получить информацию из таблицы Hospital и показать ее в приложении.

public class MainActivity extends AppCompatActivity  {
    TextView reg;

    EditText email,password;
    Button loginBt;
    Database db;
    String emailString,passwordString;
    TextView regText;
    TextView name,code;
    private DatabaseReference ref;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        ref = FirebaseDatabase.getInstance().getReference().child("Hospital").child("ABA");
        db = new Database();
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        email = (EditText) findViewById(R.id.logInEmail);
        password = (EditText) findViewById(R.id.passwordLogin);
        regText = (TextView) findViewById(R.id.reg_text);
        loginBt = (Button) findViewById(R.id.logInButton);
       /* loginBt.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                login();
            }
        });*/
        regText.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                createAccount();
            }
        });
        name = (TextView) findViewById(R.id.hospitalNameMain);
        code = (TextView) findViewById(R.id.hospitalCodeMain);
        loginBt.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                show();
            }
        });


    }

    private void show() {

        ref = FirebaseDatabase.getInstance().getReference().child("Hospital").child("QCH");
        ref.addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(DataSnapshot dataSnapshot) {
                Toast.makeText(MainActivity.this,"log in ",Toast.LENGTH_SHORT).show();
                String hospitalName = dataSnapshot.child("hospital_name").getValue().toString();
                String hospitalCode = dataSnapshot.child("hospital_code").getValue().toString();
                name.setText(hospitalName);
                code.setText(hospitalCode);
            }

            @Override
            public void onCancelled(DatabaseError databaseError) {

            }
        });

    }

    private void createAccount() {
        Intent i = new Intent(this, RegistrationActivity.class);
        startActivity(i);
    }
}

Структура базы данных:

enter image description here

Ответы [ 4 ]

0 голосов
/ 14 февраля 2019
  ref = FirebaseDatabase.getInstance().getReference().child("Hospital");
        ref.addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(DataSnapshot dataSnapshot) {
                //use for loop iterator here 
    for(DataSnapshot data1:dataSnapshot){
     //this will print the key and value in console use it as you wish.
        log.i("TAG",data1.child().getKey()+"::"+data1.child.getValue()); 
    }

            }

            @Override
            public void onCancelled(DatabaseError databaseError) {

            }
        });
0 голосов
/ 14 февраля 2019

Если вы хотите получить конкретную больницу по ID.

Используйте следующий запрос.

databaseRef.orderByChild("hostpital_code").equals(yourCode);

Таким образом, ваш полный запрос будет:

ref = FirebaseDatabase.getInstance().getReference().child("Hospital").orderByChild("hostpital_code").equals("QCH");

Do letЯ знаю, если у вас возникли проблемы.

0 голосов
/ 14 февраля 2019

Согласно вашему комментарию:

для отдельной записи, где код больницы = "QCH"

Пожалуйста, используйте следующие строки кода:

DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
DatabaseReference ref = rootRef.child("Hospital").child("QCH");
ValueEventListener valueEventListener = new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        String hospitalName = dataSnapshot.child("hospital_name").getValue(String.class);
        String hospitalCode = dataSnapshot.child("hospital_code").getValue(String.class);
        Log.d(TAG, hospitalName + " / " + hospitalCode);
    }

    @Override
    public void onCancelled(@NonNull DatabaseError databaseError) {
        Log.d(TAG, databaseError.getMessage()); //Don't ignore errors!
    }
};
ref.addListenerForSingleValueEvent(valueEventListener);

Результат в вашем logcat будет:

hjkk / QCH
0 голосов
/ 14 февраля 2019

не используйте .child("Hospital").child("QCH") для справки

ваш ref будет на этом

FirebaseDatabase.getInstance().getReference().child("Hospital")

вы получите все записи в dataSnapshot

Изменить

попытаться преобразовать dataSnapshot в модель вашей больницы и получить значения из этого

FirebaseDatabase.getInstance (). GetReference (). Child ("Hospital").child ( "QCH")

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...