【发布时间】:2021-05-07 22:31:50
【问题描述】:
我正在开展一个项目,我必须根据用户在地图上选择的位置进行自定义“游览/旅行”。 每次旅行都有一个标题,以及他选择的地点。 例如,他做了一个旅行(列表)并将其称为“Tour 1”,在这个“Tour 1”中,他首先想去酒店,然后去肯德基,然后去海滩。
我到了我列了一个列表并给它一个标题的地步,但是无法显示我在活动中计划去的地方,这是活动的截图activity example,这里是我的实时数据库的屏幕截图。
所以我想显示我计划去的所有地方,在活动中显示“Place 1”。 这是我的代码。
userDatabase = FirebaseDatabase.getInstance().getReference("UsersToursList").child(userID);
userDatabase.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot snapshot) {
tourList.clear();
for (DataSnapshot tourSnapshot : snapshot.getChildren()) {
Tour tour = tourSnapshot.getValue(Tour.class);
tourList.add(tour);
}
MyToursListAdapter adapter = new MyToursListAdapter(MyToursActivity.this,tourList);
list_view_tours.setAdapter(adapter);
}
});
这是适配器类
class MyToursListAdapter extends ArrayAdapter<Tour> {
private Activity mContext;
private List<Tour> TourList;
public MyToursListAdapter(Activity mContext, List <Tour> TourList) {
super(mContext,R.layout.tours_item_list,TourList);
this.mContext = mContext;
this.TourList = TourList;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
TextView tvTourTitle,tvPlace;
LayoutInflater inflater = mContext.getLayoutInflater();
View listItemView = inflater.inflate(R.layout.tours_item_list,null,true);
tvTourTitle = listItemView.findViewById(R.id.tour_list_tv_TourTitle);
tvPlace = listItemView.findViewById(R.id.tour_list_tv_place);
Tour tour = TourList.get(position);
tvTourTitle.setText(tour.getTourTitle());
tvPlace.setText(tour.getPlace());
return listItemView;
}
旅游课
class Tour {
String place;
public String getPlace() {
return place;
}
希望你能理解。
编辑:根据@Simran Sharma 的请求,我将发布与此问题相关的全部代码。
首先,Tour.java
class Tour {
String tourTitle;
String tourID;
String places;
public Tour(){
}
public Tour(String TourTitle,String TourID) {
tourTitle = TourTitle;
tourID = TourID;
}
public Tour(String TourTitle,String TourID,String Places) {
tourTitle = TourTitle;
tourID = TourID;
places = Places;
}
public String getTourTitle() {
return tourTitle;
}
public String getTourID() {
return tourID;
}
public String getPlaces() {
return places;
}
MyToursListAdapter.java,它实际上和以前一样,但我真的不知道我应该使用TextView还是ListView。所以请告诉我,因为我认为它是一个数组而不是一个普通的字符串。
这是我将地点添加(保存)到列表和数据库的代码:
Query query = myTourUserDatabase.orderByChild("tourTitle").equalTo(ListChosen);
query.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot snapshot) {
if(snapshot.exists()) {
for (DataSnapshot issue : snapshot.getChildren()) {
ListID = issue.getKey();
Log.d("mytag", "onClick: MapActivity Chosen list ref from spinner " + ListID);
TourListChosen_UserDB = FirebaseDatabase.getInstance().getReference("UsersToursList").child(userID).child(ListID);
Map<String, Object> Place = new HashMap<>();
Place.put("place",PlaceName);
//Tour tour = snapshot.getValue(Tour.class);
//places.add(tour);
TourListChosen_UserDB.setValue(Place);
}
}
}
@Override
public void onCancelled(@NonNull DatabaseError error) {
}
});
这是我检索整个列表的代码(应该包含我添加的所有地方'例如肯德基,酒店...'但它不起作用):
userDatabase.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot snapshot) {
tourList.clear();
for (DataSnapshot tourSnapshot : snapshot.getChildren()) {
Tour tour = tourSnapshot.getValue(Tour.class);
tourList.add(tour);
}
MyToursListAdapter adapter = new MyToursListAdapter(MyToursActivity.this,tourList);
list_view_tours.setAdapter(adapter);
}
@Override
public void onCancelled(@NonNull DatabaseError error) {
}
});
我想这就是我得到的关于这个问题的所有代码......
【问题讨论】:
标签: java android database firebase firebase-realtime-database