#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