я хочу получить данные полностью в одном Textview из базы данных Firebase - PullRequest
1 голос
/ 16 февраля 2020

Я создал приложение для сканирования штрих-кодов, и оно считывает идентификатор штрих-кода и нуждалось в выводе в качестве голосового вывода. для того, чтобы прочитать все, что мне нужно, чтобы собрать все данные вместе в одном TextView. Я сделал все возможное, чтобы добавить запрос из базы данных. но он отображается только в TextView как com.google.firebase.database.Query@9fc9e4d, и мой движок приложения TTS четко его читает. Но мне нужно установить его как все данные в одной TextView из базы данных, чтобы высказаться. пожалуйста, помогите мне???? только здесь я прикрепил метод обработки результатов.

@Override 
public void handleResult(Result result) { final String scanResult = result.getText();

    databasefetch = FirebaseDatabase.getInstance().getReference("save");
    databasefetch.addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(@NonNull DataSnapshot dataSnapshot) {



            setContentView(R.layout.activity_second);
            TextView text = (TextView) findViewById(R.id.textView3);
            String tst = databasefetch.child("save").orderByChild("id").equalTo(scanResult).toString();
            text.setText(tst);



            //text to speech
            String  toSpeak=text.getText().toString();
            //Toast.makeText(getApplicationContext(),toSpeak,Toast.LENGTH_SHORT).show();
            txt.speak(toSpeak,TextToSpeech.QUEUE_FLUSH,null);


        }

        @Override
        public void onCancelled(@NonNull DatabaseError databaseError) {

        }
    });
}

enter image description here

enter image description here

Ответы [ 2 ]

0 голосов
/ 16 февраля 2020

Нет необходимости выполнять несколько запросов для фильтрации данных на основе id. Проверьте ниже:

databasefetch = FirebaseDatabase.getInstance().getReference("save");
databasefetch.orderByChild("id").equalTo(scanResult).addValueEventListener(new ValueEventListener() {
    @Override
    public void onDataChange(@NonNull DataSnapshot dataSnapshot) {

        String  toSpeak = "";

        for (DataSnapshot childSnapshot: dataSnapshot.getChildren()) {

            String name = childSnapshot.child("name").getValue(String.class);
            String price = childSnapshot.child("price").getValue(String.class);
            String details = childSnapshot.child("details").getValue(String.class);

            toSpeak = name + ", " + price + ", " + details;
        }

        text.setText(toSpeak);

        txt.speak(toSpeak, TextToSpeech.QUEUE_FLUSH,null);
    }

    @Override
    public void onCancelled(@NonNull DatabaseError databaseError) {

    }
});
0 голосов
/ 16 февраля 2020

Попробуйте что-то вроде этого

@Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        for (DataSnapshot postSnapshot: dataSnapshot.getChildren()) {
            // TODO: handle the post
            YourModelClass object = postSnapshot.getValue(YourModelClass.class);
            text.setText(object.getId().equalsIgnoreCase(scanResult) ? object.getDescription() : "");
        }
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...