Чтение данных из Hashmap - Android studio, Firebase

1

Вот изображение моей настройки базы данных Firebase:

Изображение 174551

Я пытаюсь запрограммировать простое приложение для заметок, я могу сохранить все в Firebase, но изо всех сил пытаюсь получить информацию.

Дочерний элемент ID пользователя генерируется случайным образом, что вызывает у меня проблемы при попытке получить данные. Приведенный ниже код показывает, как я сохраняю все данные в базе данных Firebase.

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_progress_reports);

    findViewById(R.id.saveNoteButton).setOnClickListener(saveReport);
    progressReportTitle = findViewById(R.id.progressReportTitle);
    progressReportContent = findViewById(R.id.progressReportContent);

    fAuth = FirebaseAuth.getInstance();
    fProgressReportsDatabase = FirebaseDatabase.getInstance().getReference().child("ProgressReports").child(fAuth.getCurrentUser().getUid());

    findViewById(R.id.loadNoteButton).setOnClickListener(loadReports);
}

View.OnClickListener saveReport = new View.OnClickListener() {
    @Override
    public void onClick(View v) {

        String title = progressReportTitle.getText().toString().trim();
        String content = progressReportContent.getText().toString().trim();

        if (title.isEmpty()) {
            progressReportTitle.setError("Please Enter a title for this report");
            progressReportTitle.requestFocus();
        } else if (content.isEmpty()) {
            progressReportContent.setError("No content within report");
            progressReportContent.requestFocus();
        } else {
            saveReportToDB(title, content);
        }
    }
};

private void saveReportToDB(String title, String content) {

    if (fAuth.getCurrentUser() != null) {
        final DatabaseReference newProgressReportRef = fProgressReportsDatabase.push();
        final Map progressReportMap = new HashMap();
        progressReportMap.put("title", title);
        progressReportMap.put("content", content);
        progressReportMap.put("timestamp", ServerValue.TIMESTAMP);

И ниже показано, как я безуспешно пытаюсь загрузить эти данные в просмотр списка на отдельном мероприятии.

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_list_view);

    mListView = (findViewById(R.id.progressList));

    fAuth = FirebaseAuth.getInstance();
    fFirebaseDatabase = FirebaseDatabase.getInstance();
    myRef = FirebaseDatabase.getInstance().getReference().child("ProgressReports").child(fAuth.getCurrentUser().getUid());;
    FirebaseUser user = fAuth.getCurrentUser();
    userID = user.getUid();


    myRef.addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
            showData(dataSnapshot);
        }

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

        }
    });
}


private void showData(DataSnapshot dataSnapshot){
    for(DataSnapshot ds : dataSnapshot.getChildren()){
        ReportInformation rInfo = new ReportInformation();
        rInfo.setTitle(ds.child(userID).child("title").getValue(ReportInformation.class).getTitle());
        rInfo.setContent(ds.child(userID).child("content").getValue(ReportInformation.class).getContent());
        //rInfo.setTimestamp(ds.child(userID).child("timestamp").getValue().toString());

        ArrayList<String> array = new ArrayList<>();
        array.add(rInfo.getTitle());
        array.add(rInfo.getContent());
        //array.add(rInfo.getTimestamp());
        ArrayAdapter adapter = new ArrayAdapter(this, android.R.layout.simple_list_item_1, array);
        mListView.setAdapter(adapter);

    }
}

Что я делаю не так, и как я могу запросить базу данных для HashMap который генерируется случайным образом?

Спасибо, парни

Теги:
firebase
firebase-realtime-database

1 ответ

1
Лучший ответ

Чтобы отобразить все заголовки всех этих объектов в ListView, используйте следующие строки кода:

String uid = FirebaseAuth.getInstance().getCurrentUser().getUid();
DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
DatabaseReference uidRef = rootRef.child("ProgressReports").child(uid);
ValueEventListener eventListener = new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        List<String> list = new ArrayList<>();
        for(DataSnapshot ds : dataSnapshot.getChildren()) {
            String title = ds.child("title").getValue(String.class);
            list.add(title);
            Log.d("TAG", title);
        }
        ListView listView = (ListView) findViewById(R.id.list_view);
        ArrayAdapter<String> arrayAdapter = new ArrayAdapter<String>(getApplicationContext(), android.R.layout.simple_list_item_1, list);
        listView.setAdapter(arrayAdapter);
    }

    @Override
    public void onCancelled(DatabaseError databaseError) {}
};
uidRef.addListenerForSingleValueEvent(eventListener);

Ваш список будет содержать два заголовка:

Test
Test

Больше информации здесь, если вы хотите использовать модельный класс.

  • 0
    Спасибо за это, Алекс, я действительно запутался в этом, плохо сообщу, как я нахожусь
  • 0
    Хорошо, держи меня в курсе. Скажи мне, если это работает.
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню