我无法从特定用户的firebase中获取数据(使用uid检查方法)

dw1jzc5e  于 2022-11-25  发布在  其他
关注(0)|答案(1)|浏览(148)

我命令当一个用户添加信息时,他也会将他的uid从另一个用户那里转移过来;当接收到uid时,会将接收到的uid与用户所在文件夹中的uid进行比较,如果匹配,则接收到某个用户的数据(编号、姓名)。用户模型

public class ShopUser {
    private String client_shop,numberphone_shop,ShopInfouid;
    public ShopUser(){
    }
    public ShopUser(String client_shop, String numberphone_shop, String shopInfouid) {
        this.client_shop = client_shop;
        this.numberphone_shop = numberphone_shop;
    this.ShopInfouid=shopInfouid;
    }
    public String getClient_shop() {
        return client_shop;
    }
    public void setClient_shop(String client_shop) {
        this.client_shop = client_shop;
    }
    public String getNumberphone_shop() {
        return numberphone_shop;
    }
    public void setNumberphone_shop(String numberphone_shop) {
        this.numberphone_shop = numberphone_shop;
    }
    public String getShopInfouid() {
        return ShopInfouid;
    }
    public void setShopInfouid(String shopInfouid) {
        ShopInfouid = shopInfouid;
    }
}

验证方法

ShopInfoRef.orderByChild("ShopInfouid").equalTo(getIntent().getExtras().get("UidShop").toString())
////UidSop это принятый uid переносится из другого активити  а ShopInfouid это uid пользователя так называется в бд////
            .addValueEventListener(new ValueEventListener() {
                @Override
                public void onDataChange(@NonNull DataSnapshot snapshot) {
                    if (snapshot.exists() && snapshot.getChildrenCount() > 0) {
phone=snapshot.getValue(ShopUser.class).getNumberphone_shop();
                    }else {
                        Toast.makeText(OplataActivity.this, "Данных нет", Toast.LENGTH_SHORT).show();
                    }
                }
                @Override
                public void onCancelled(@NonNull DatabaseError error) {
                }
            });

初始化

private String phone;
    ShopInfoRef=FirebaseDatabase.getInstance().getReference().child("shop");

我试图检查日志d,但给出了一个错误,即电话字符串具有空值,并试图将此字符串传递给电话打开方法,但所需的号码没有出现在那里,下面是方法

image_phone_shop.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Intent ohoneIntent=new Intent(Intent.ACTION_DIAL);
                ohoneIntent.setData(Uri.parse("tel:"+ phone));
                startActivity(ohoneIntent);
            }
        });

下面是users文件夹,其中的用户uid与接受的uid x1c 0d1x进行比较
下面是数据文件夹,uid从其中获取以进行比较

uajslkp6

uajslkp61#

当您对Firebase数据库执行查询时,可能会有多个结果。因此快照包含这些结果的列表。即使只有一个结果,快照也将包含一个结果的列表。
您的onDataChange需要通过循环snapshot.getChildren()来处理此列表:

public void onDataChange(@NonNull DataSnapshot snapshot) {
    for (DataSnapshot shopUserSnapshot: snapshot.getChildren()) {
        phone=shopUserSnapshot.getValue(ShopUser.class).getNumberphone_shop();
    }
}

另外:请不要将onCancelled留空,因为这样会忽略潜在的错误。至少它应该看起来像这样:

@Override
public void onCancelled(@NonNull DatabaseError error) {
    throw error.toException()l
}

相关问题