[英]Can't retrieve data from Firebase Realtime db in Android Studio
[英]Retrieve and display corresponding data from firebase when clicking on spinner item in Android Studio Java
我正在制作一個應用程序,在選擇時提取有關湖泊的所有信息。 我在 firebase 中有一個湖泊數據庫,其中包含所有重要信息,例如名稱、位置、時間、發現的魚等。我已經用所有湖泊的名稱填充了一個微調器。 現在我想從微調器中單擊一個特定的湖泊名稱以獲取微調器下方顯示的所有信息,我已經進行了大量研究但沒有任何幫助。
這是我到目前為止的代碼
public class places_to_fish extends AppCompatActivity {
Spinner spinner;
DatabaseReference databaseReference;
List<String> names;
String selectedName;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_places_to_fish);
names = new ArrayList<>();
FirebaseDatabase database = FirebaseDatabase.getInstance();
databaseReference = FirebaseDatabase.getInstance().getReference();
databaseReference.child("Places").addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot snapshot) {
for (DataSnapshot childSnap : snapshot.getChildren()) {
String spinnerName = childSnap.child("Name").getValue(String.class);
names.add(spinnerName);
}
ArrayAdapter<String> arrayAdapter = new ArrayAdapter<>(places_to_fish.this, android.R.layout.simple_spinner_item, names);
arrayAdapter.setDropDownViewResource(android.R.layout.simple_spinner_item);
spinner.setAdapter(arrayAdapter);
spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) {
selectedName = arrayAdapter.getItem(i);
}
@Override
public void onNothingSelected(AdapterView<?> adapterView) {
}
});
}
@Override
public void onCancelled(@NonNull DatabaseError error) {
}
});
}
}
創建 class Lake.java
public class Lake {
public String Fish, Hours, Location, Name, Zipcode ;
public Lake(){}
public Lake(String Fish, String Hours,String Location, String Name, String Zipcode){
this.Fish = Fish;
this.Hours = Hours;
this.Location = Location;
this.Name = Name;
this.Zipcode = Zipcode;
}
}
然后,在您當前的 class 中聲明一個 HashMap
HashMap<String, Lake> map = new HashMap<String, Lake>();
現在,初始化 map 並將所有湖泊添加到其中
map.clear();
databaseReference.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot snapshot) {
Iterator <DataSnapshot> it = snapshot.getChildren().iterator();
while(it.hasNext() ){
DataSnapshot item = it.next();
name = item.child("full_name").getValue().toString().trim();
String Fish = item.child("Fish").getValue().toString().trim();
String Hours = item.child("Hours").getValue().toString().trim();
String Location = item.child("Location").getValue().toString().trim();
String Name = item.child("Name").getValue().toString().trim();
String Zipcode = item.child("Zipcode").getValue().toString().trim();
Lake tmp_Lake = new Lake(Fish,Hours,Location,Name,Zipcode);
map.put(Name,tmp_Lake);
}
}
@Override
public void onCancelled(@NonNull DatabaseError error) {
}
});
現在你有一個 map,其中包含所有湖泊信息(按名稱排序)所以現在,當你選擇湖泊時,你可以從 map 中獲取所有詳細信息。此代碼將創建包含湖泊名稱的數組“名稱”
public void addToList(){
String [] names = new String[map.size()];
int i = 0;
for(User tmp : map.values()){
names[i] = tmp.Name;
i++;
}
在初始化 map 之后調用此方法,最后,通過創建一個字符串並將其加載到文本框來顯示選定的湖泊信息
ArrayAdapter arrayAdapter = new ArrayAdapter(place_to_fish.this, android.R.layout.simple_list_item_1,names);
spinner.setAdapter(arrayAdapter);
spinner.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int i, long id) {
String lake_name = names[i];
Lake tmp = map.get(names[i]);
String [] Lake_details = new String[5];
Lake_details[0] = "Name: "+tmp.Name + "\n";
Lake_details[1] = "Fish: "+tmp.Fish + "\n";
Lake_details[2] = "Location: "+tmp.Location + "\n";
Lake_details[3] = "Hours: "+tmp.Hours + "\n";
Lake_details[4] = "Zipcode "+tmp.Zipcode + "\n";
String text = "";
for (int i = 1; i < Lake_details.length; i++)
text += Lake_details[i];
full_text.setText(text);//"full_text" is a clear text box
}
});
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.