java 获取监听器_java – 如何实现Observer以从侦听器获取数据?

本文探讨如何在Java中使用Observer模式从Firebase监听器获取数据。通过创建一个`MyObservable`类扩展`Observable`,并实现`Firebase`的监听器,作者遇到了如何在`MainActivity`的`appDrawer()`方法中获取异步数据的问题。讨论了是否应该使用Observer模式来处理这种场景,并寻求解决方案。
摘要由CSDN通过智能技术生成

我正在使用

MaterialDrawer库为我的应用程序创建一个简单的抽屉,库中的一些类实例需要在调用时传递给它们的字符串.一个例子是IProfile类:

IProfile profile = new ProfileDrawerItem().withName(“John Doe”);

其中withName()方法接受一个字符串.

我创建了一个类MyObservable.java(扩展Observable)类,我打算用它来获取要在我的MainActivity中使用的数据,该实现了MaterialDrawer库.在这个类中,我有一个方法implementData(),它有我的firebase数据库所需的监听器.

这就是它的样子:

public class MyObservable extends Observable {

// Attach our firebase reference...

Firebase userRef = new Firebase("https://myApp.firebaseio.com/users");

AuthData authData;

public String username = "";

public String email = "";

public void changeUsername(String username) {

this.username = username;

setChanged();

notifyObservers(username);

}

public void implementData(){

// Get the authentication data of our user from the reference.

authData = userRef.getAuth();

// This is the listener I have to get the data from.

userRef.child(authData.getUid()).addListenerForSingleValueEvent(new ValueEventListener() {

@Override

public void onDataChange(DataSnapshot snapshot) {

UserSchema user = snapshot.getValue(UserSchema.class);

// This guy needs to be used in the MainActivity appDrawer() method

String userName = user.getName();

}

@Override

public void onCancelled(FirebaseError firebaseError) {

}

});

}

}

class MyObserver implements Observer {

public void update(Observable observable,Object data) {

// For now I just print it out to System.out

System.out.println("Username:" + data);

}

}

然后我通过changeUsername()方法通知我的观察者用户名更改:

public void changeUsername(String username) {

this.username = username;

setChanged();

notifyObservers(username);

}

在MyObservable类中,我有一个MyObserver类,它实现Observer,并在更新观察者时调用update()方法.在now()方法中,我只打印出用户的用户名以确保实际发生了什么.

这是我需要来自观察者的数据(在MainActivity中):

public class MainActivity extends AppCompatActivity {

...

public void appDrawer(){

IProfile profile = new ProfileDrawerItem()

// I need the user's data here

.withName("Test")

.withEmail("test@test.com")

.withIcon(R.drawable.avatar2);

}

...

}

我花了几个小时试图通过尝试检索要在我的MainActivity中使用的数据来对发生在侦听器中的事件做出“反应”,但我不确定我是否正确使用了Observable / Observer模式,因为这是一个异步Firebase获取数据的事件,使用Observer是最好的方法.

appDrawer()方法在我的Activity的onCreate()中调用.

如何使用Observer从Listener中检索数据,以便在其他地方使用它?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值