Как получить дочерние данные из Firebase в приложение для Android

#android #firebase #firebase-realtime-database #android-listview

#Android #firebase #firebase-база данных в реальном времени #android-listview

Вопрос:

В настоящее время я новичок в разработке приложений, и из приведенного ниже кода я хотел бы иметь возможность извлекать данные значений из Firebase. У меня есть ListView, настроенный в моем приложении для Android, и я хотел бы иметь возможность щелкнуть элемент из Listview и перейти к другому действию. Я хочу, чтобы новое действие отображало данные из firebase DB.

введите описание изображения здесь

Кто-нибудь, пожалуйста, может посоветовать, очень признателен?

 ublic class MainActivity extends AppCompatActivity {

private ArrayAdapter<String> arrayAdapter;

private ListView mListView;


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

    final String uid = FirebaseAuth.getInstance().getCurrentUser().myHikes();
    DatabaseReference mDbRef = FirebaseDatabase.getInstance().getReference();
    final DatabaseReference uidRef = mDbRef.child("Hikes").child(uid);
    final List<String> list = new ArrayList<>();
    final ArrayList<String> id = new ArrayList<>();
    arrayAdapter = new ArrayAdapter<>(getApplication(), android.R.layout.simple_list_item_1, list);


    String key = uidRef.push().getKey();
    final hikeModClass report = new hikeModClass(String);
    report.setName("name");
    report.setDescription("description");
    report.setKey(key);
    uidRef.child(key).setValue(report);

    ValueEventListener eventListener = new ValueEventListener() {
        @Override
        public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                for (DataSnapshot dataSnapshot1 : DataSnapshot.getChildren()){
                    id.add(dataSnapshot1.getKey());
                    String name = dataSnapshot.child("name").getValue(String.class);
                    String description = dataSnapshot.child("description").getValue(String.class);
                    list.add(name   "n"   description   "n");
                    Log.d("TAG", name);
                }

                ListView = findViewById(R.id.mListView);
                mListView.setAdapter(arrayAdapter);
        }

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

        }
    };
    uidRef.addListenerForSingleValueEvent(eventListener);
    final ListView progressList = findViewById(R.id.progressList);

    progressList.setOnClickListener(new AdapterView.OnItemClickListener());{

        @Override
        public void onItemClick(AdapterView<?> parent, View view, int x, long l){

            ValueEventListener eventListener1 = new ValueEventListener() {
                @Override
                public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                    ArrayList<hikeModClass> list = new ArrayList<>();
                    for (DataSnapshot dataSnapshot1: DataSnapshot.getChildren()){
                        hikeModClass report = dataSnapshot.getValue(hikeModClass.class);
                        list.add(report);
                    }
                    Intent intent = new Intent(MainActivity.this, hikeModClass.class);
                    ListView listView = findViewById(R.id.progressList);
                    listView.setAdapter(arrayAdapter);
                    startActivity(intent);

                    listView.setOnClickListener(new AdapterView.OnItemClickListener(){

                        @Override
                        public void onItemClick(AdapterView<?> adapterView, View view, int i, long l){
                            hikeModClass arrayAdapterItem = arrayAdapter.getItem(i);
                            Intent intent = new Intent(MainActivity.this, hikeModClass.class);
                            intent.putExtra("object", hikeModClass);
                            startActivity(intent);
                        }

                    });
                }

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

                }
            };
            uidRef.addListenerForSingleValueEvent(eventListener);
        }
    }



    }
}
  

Класс модели

 public class hikeModClass {

private String name;
private String description;
private String key;

public hikeModClass(String name, String description, String key) {
    this.name = name;
    this.description = description;
    this.key = key;
}

public String getKey() {
    return key;
}

public void setKey(String key) {
    this.key = key;
}

public String getName() {
    return name;
}

public void setName(String name) {
    this.name = name;
}

public String getDescription() {
    return description;
}

public void setDescription(String description) {
    this.description = description;
}
}
  

Ответ №1:

Приведенные ниже коды помогут вам извлечь все данные из ключа myHike и сохранить их в Arraylist, вы можете дополнительно отобразить список в ListView

Определите Arralist сверху следующим образом…

 List<hikeModClass> list = new ArrayList<>();
  

Код для добавления данных в ArrayList

 databaseReference = FirebaseDatabase.getInstance().getReference("hike-finder"); //hike-finder is your database name
    databaseReference.child("Hikes").child("myHikes").addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(final DataSnapshot dataSnapshot) {
               if (snapshot.exists()) {

                        for (DataSnapshot dataSnapshot : snapshot.getChildren()) {
                            hikeModClass report = dataSnapshot.getValue(hikeModClass.class);
                            list.add(report); //NOW ALL THE DATA ADDED INTO THE LIST YOU CAN SIMPLY DISPLAY IN LISTVIEW
                        }
                }
        }
});
  

Теперь вам нужно отобразить список в ListView