我正在使用

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中检索数据,以便在其他地方使用它?

java从外部得到数据_java – 如何实现Observer以从侦听器获取数据?相关推荐

  1. java消息失败重发_JMS消息在JMS侦听器中重新发送异常

    Javadoc为 org.springframework.jms.listener.AbstractMessageListenerContainer 表示,如果 "sessionAcknow ...

  2. 【15】Vue:02-Vue表单基本操作、表单修饰符、自定义指令、计算属性computed、侦听器watch、过滤器、生命周期、数组变异方法、替换数组、动态数组响应数据、图书列表案例、TODOS案例

    文章目录 day02 Vue常用特性 表单基本操作 表单修饰符 自定义指令 Vue.directive 注册全局指令 Vue.directive 注册全局指令 带参数 自定义指令局部指令 计算属性 c ...

  3. 【vue3 Api - watchEffect 的讲解 使用】- 侦听响应式数据执行副作用(effect)函数

    在了解 `watchEffect` api之前,需要了解在vue中,副作用函数的定义是什么: 字面意义的讲,副作用函数指的是会产生副作用的函数,例如下面该函数: var num = 10 functi ...

  4. java 执行外部命令 苹果_Java中执行外部命令

    在项目中执行一个linux的shell脚本,于是需要在java环境下执行外部命令如系统命令.linux命令的需求,本人小小研究了一下,又上网查了一些资料先整理如下. java执行外部命令主要依赖两个类 ...

  5. 异常将上下文初始化事件发送到类的侦听器实例._Java CLassLoader类加载器详解,一点课堂(多岸学院)...

    Java CLassLoader 类加载器(class loader)是 Java™中的一个很重要的概念.类加载器负责加载 Java 类的字节代码到 Java 虚拟机中.本文首先详细介绍了 Java ...

  6. extjs中store获取后台数据_Excel实战技巧64: 从工作簿中获取数据(不使用VBA)

    学习Excel技术,关注微信公众号: excelperfect 这是在研读<Escape From Excel Hell>时学到的技术,从本工作簿中或者其他工作簿中获取所需要的数据,以便于 ...

  7. python 从excel中抓取数据_python接口自动化(三)——从excel中获取数据

    python接口自动化(三)--从excel中获取数据 1.按照之前的设计思路,我们需要从excel中去获取测试用例,所我们先封装一个获取数据的工具 from Data.with_config imp ...

  8. java中mysql中标点符号_java – 如何在使用JDBC从MySQL数据库中提取数据时避免丢失标点符号?...

    首先,我正在使用: Java 1.7.0_02 MySQL 5.1.50 ZendServer CE (if that matters) 我用来从Java连接到MySQL的JDBC驱动程序是com.m ...

  9. java 多线程 共享数据_JAVA多线程提高四:多个线程之间共享数据的方式

    多个线程访问共享对象和数据的方式 如果每个线程执行的代码相同,可以使用同一个Runnable对象,这个Runnable对象中有那个共享数据,例如,买票系统就可以这么做. 如果每个线程执行的代码不同,这 ...

最新文章

  1. 鸿蒙os操作系统合作伙伴,华为公布三大鸿蒙OS系统 已有大量合作伙伴进行开发...
  2. 【网摘】检测 iframe 是否加载完成
  3. python访问memcached
  4. c语言普通变量间接访问,C语言学习笔记-指针
  5. python虽然火为什么工作少_学 Python 的理由千万条,不秃第一条
  6. 各种拿webshell
  7. HTML编码问题导致的乱码
  8. unable to find setter method for attribute:[commandName]
  9. c# 傅里叶变换 频域_如何学会傅里叶变换?
  10. 小红书6.18种草拔草投放攻略,品牌制胜决策时刻
  11. python实现批量批量生成二维码并粘贴到另外图片上,便于打印扫描测试
  12. 浏览器点击复制内容并打开微信
  13. 性能测试指标TPS(Transaction per Second)总结
  14. 众多交通工具3dm Rhino资源素材一键即可获取
  15. 图书管理系统(图书类)
  16. 中国科学院计算机专业职称,中国科学院关于高级工程师职务分级的意见
  17. 一款很好用的调试JS的Eclipse插件
  18. 产品读书《让大象飞:激进创新,让你一飞冲天的创业术》
  19. 全志D1-H裸奔工具XFEL
  20. 程序人生:企业网站解决方案

热门文章

  1. div.php织梦自定义表判断不能为空,织梦使用if判断某个字段是否为空
  2. python获取系统参数_python 常用系统参数
  3. android shell强制删除文件夹_别再乱清手机内存了,删除这3个“特殊”文件夹!空间释放8GB...
  4. 巨杉mysql支持临时表_sql server用变量动态命名临时表表名
  5. python三层设计_python 三层架构说明
  6. oracle 创建表空间 pcincrease,oracle建表空间
  7. 在哪里编写写php,php扩展编写
  8. html5 打包ios.上架,iOS帮客户打包App上架的正确姿势
  9. 计算机网络利用率是什么_当我们在谈论高并发的时候究竟在谈什么?
  10. 支持markdown的服务器,基于tornado实现的一个markdown解析服务器