基本java示例-需要帮助

yqkkidmi  于 2021-06-29  发布在  Java
关注(0)|答案(2)|浏览(321)

这个问题在这里已经有答案了

getcontactsfromfirebase()方法返回空列表(1个答案)
java—如何在事件侦听器中更改“local”变量(6个答案)
11天前关门了。
大家好,我需要这部分java代码的帮助

public void getMydata() {

    String B;
    databaseAds= FirebaseDatabase.getInstance().getReference().child("AdmbAd");
    databaseAds.addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(@NonNull DataSnapshot snapshot) {
            String myBannerID = snapshot.child("bannerId").getValue().toString();

        }

        @Override
        public void onCancelled(@NonNull DatabaseError error) {

        }
    });
}

问题是如何修改这段代码来影响我从服务器(在ondatachange方法中)得到的mybannerid的值到这个方法之外的字符串b?

cngwdvgl

cngwdvgl1#

您将无法从回调中修改局部变量
不管你用你的手做什么 B string,你需要在 onDataChange 方法
也要当心 addValueEventListener 是一个异步进程,所以如果您编写

public void getMydata() {

    System.out.println("1");
    databaseAds= FirebaseDatabase.getInstance().getReference().child("AdmbAd");
    databaseAds.addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(@NonNull DataSnapshot snapshot) {
            System.out.println("2");
        }

        @Override
        public void onCancelled(@NonNull DatabaseError error) {

        }
    });
    System.out.println("3");
}

很有可能输出是

1
3
2
frebpwbc

frebpwbc2#

因为您正在进行的调用是异步的,所以可以使用java.lang.reflect.method在getmydata方法中设置回调函数

public void getMydata(Method method) {

    String B;
    databaseAds= FirebaseDatabase.getInstance().getReference().child("AdmbAd");
    databaseAds.addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(@NonNull DataSnapshot snapshot) {
            String myBannerID = snapshot.child("bannerId").getValue().toString();
            method(myBannedId);
        }

        @Override
        public void onCancelled(@NonNull DatabaseError error) {

        }
    });
}

调用方法对象的方式是

Method callbackMethod = Main.class.getMethod("callback", parameterTypes[0]);

相关问题