[英]Firebase Database accessing nodes from child android
我有一個像這樣的節點
在這種情況下,我搜索id節點01、02 ......當我找到它時,將其發送到另一個活動,在該活動中,我搜索匹配的id編號,例如
當ID匹配時,我在回收者視圖中顯示它們,現在我想獲取我要搜索的節點的父級,在這種情況下,Restaurant-> 01,但是每當我調用我的database.getKey時,它返回的餐廳就不是01
我的問題是如何獲取父節點而不是原始節點或(父節點的父節點)? 非常感謝
這是我的代碼:
RecyclerView recyclerView;
RecyclerView.LayoutManager layoutManager;
FirebaseDatabase database;
DatabaseReference restaurantList;
String restaurantId;
FirebaseRecyclerAdapter<RestaurantModel, RestaurantViewHolder> adapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_restaurant_list);
//Firebase
database = FirebaseDatabase.getInstance();
restaurantList = database.getReference("Restaurant");
recyclerView = (RecyclerView) findViewById(R.id.recycler_restaurants);
layoutManager = new LinearLayoutManager(this);
recyclerView.setHasFixedSize(true);
recyclerView.setLayoutManager(layoutManager);
if(getIntent() !=null)
restaurantId = getIntent().getStringExtra("RestaurantId");
if(!restaurantId.isEmpty() && restaurantId != null)
{
loadListRestaurant(restaurantId);
}
}
private void loadListRestaurant(final String restaurantId) {
adapter = new FirebaseRecyclerAdapter<RestaurantModel, RestaurantViewHolder>(
RestaurantModel.class,
R.layout.restaurant_menu_item,
RestaurantViewHolder.class,
restaurantList.orderByChild("RestaurantId").equalTo(restaurantId)
) {
@Override
protected void populateViewHolder(RestaurantViewHolder viewHolder, RestaurantModel model, int position) {
viewHolder.restaurantName.setText(model.getName());
Picasso.get().load(model.getImage())
.into(viewHolder.restaurantImage);
viewHolder.restaurantRate.setRating(Float.parseFloat(model.getRating()));
viewHolder.restaurantCategory.setText(model.getDescription());
try {
if (Integer.parseInt(model.getPrice()) == 0)
viewHolder.priceRate.setRating(2);
else
viewHolder.priceRate.setRating(Integer.parseInt(model.getPrice()));
}
catch (Exception e){}
final RestaurantModel local = model;
viewHolder.setItemClickListener(new ItemClickListener() {
@Override
public void onClick(View view, int position, boolean isLongClick) {
Intent fragmentintent = new Intent(RestaurantList.this, main_intermediate.class);
fragmentintent.putExtra("RestaurantId", restaurantList.getKey());
Log.d(TAG, restaurantList.getKey() );
startActivity(fragmentintent);
}
});
}
};
recyclerView.setAdapter(adapter);
}
}
要獲取密鑰,您需要在01-02內循環,以便在使用getKey()
時能夠檢索它們,因此請嘗試以下操作:
DatabaseReference reference = FirebaseDatabase.getInstance().getReference("Restaurant");
reference.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
for(DataSnapshot datas: dataSnapshot.getChildren()){
String keys=datas.getKey();
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
這是一場掙扎,但我明白了,哈哈,謝謝所有嘗試過的人。 我使用了我的項單擊偵聽器來獲取對視圖位置的引用,然后將我的適配器作為引用附加到該位置,從那里我就可以使用getKey了。
像這樣的東西:)
final RestaurantModel local = model;
viewHolder.setItemClickListener(new ItemClickListener() {
@Override
public void onClick(View view, int position, boolean isLongClick) {
Intent fragmentintent = new Intent(RestaurantList.this, main_intermediate.class);
fragmentintent.putExtra("RestaurantId", adapter.getRef(position).getKey());
startActivity(fragmentintent);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.