首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从子android访问节点的Firebase数据库

从子android访问节点的Firebase数据库
EN

Stack Overflow用户
提问于 2018-07-21 14:54:15
回答 2查看 106关注 0票数 1

我有这样一个节点

我在本例中搜索id节点01,02,.当我找到它时,我将它发送到另一个活动中,在该活动中,我搜索匹配的id号,如下所示

当Id匹配时,我将它们显示在回收器视图中,现在我希望得到我正在搜索的节点的父节点- 01 ,但是每当我调用自己的database.getKey时,它返回的是餐厅而不是01。

我的问题是如何获得父节点而不是源节点或(父节点的父节点)?非常感谢

这是我的代码:

代码语言:javascript
复制
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);

}

}

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-07-21 17:10:40

这是一场斗争,但我明白了,谢谢大家的努力。我使用我的项目单击监听器来获取视图中位置的引用,然后将我的适配器作为参考文件附加到这个位置,从那里我可以使用getKey。

类似这样的工作:)

代码语言:javascript
复制
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);
票数 0
EN

Stack Overflow用户

发布于 2018-07-21 15:24:17

要获得密钥,需要在01-02内循环,以便在使用getKey()时能够检索它们,因此请尝试以下操作:

代码语言:javascript
复制
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) {
    }
 });
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51457214

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档