簡體   English   中英

Firebase數據庫從子android訪問節點

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM