首页 > 代码库 > 简单使用rxjava,告别繁琐的接口回调(1)
简单使用rxjava,告别繁琐的接口回调(1)
接口回调虽然繁琐,但也是必须掌握的一个技巧,接口回调的用法很多,首先搞清楚什么时候需要用接口回调,怎么使用接口回调。
public class InterQueryDataActivity extends AppCompatActivity { @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.layout_interquery); initView(); } Handler handler = new Handler(){ @Override public void handleMessage(Message msg) { name_tv.setText(msg.getData().getString("name")); } }; private TextView name_tv; private void initView() { Button query_btn = (Button) findViewById(R.id.query_btn); name_tv = (TextView) findViewById(R.id.name_tv); query_btn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { InternetQueryData internetQueryData = new InternetQueryData(new InternetQueryData.QuerySuccessListener() { @Override public void onQuerySuccess(String msg) { // name_tv.setText(msg); Message message = new Message(); Bundle bundle = new Bundle(); bundle.putString("name",msg); message.setData(bundle); handler.sendMessage(message); } }); internetQueryData.queryData(); } }); } }
public class InternetQueryData { public interface QuerySuccessListener{ void onQuerySuccess(String msg); } private QuerySuccessListener querySuccessListener; public InternetQueryData(QuerySuccessListener querySuccessListener){ this.querySuccessListener = querySuccessListener; } public void queryData(){ //线程睡眠模仿网络请求 new Thread(new Runnable() { @Override public void run() { try { Thread.sleep(4000); String msg = "程序员大亨"; querySuccessListener.onQuerySuccess(msg); } catch (InterruptedException e) { e.printStackTrace(); } } }).start(); } }
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent"> <Button android:id="@+id/query_btn" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="请求数据"/> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="name:"/> <TextView android:id="@+id/name_tv" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text=""/> </LinearLayout> </LinearLayout>
以上的例子中,在InterQueryDataActivity 中按下按钮时去进行一个请求(模仿网络请求),由InternetQueryData这个网络请求管理类执行操作。我们新建一个线程模拟网络连接请求数据的过程。
当睡眠4s后,我们取到了数据,此时怎么返回给activity进行UI的展示呢,这时候就需要用到接口回调了。
我们创建一个接口QuerySuccessListener,在这个接口中定义一个抽象方法onQuerySuccess,参数msg呢,则是你需要用到的数据,当然这里可以是任意参数,自己定义即可。
然后我们在构造器中要求外部调用我们这个网络请求管理类的时候必须传入这个接口的一个实例对象,重写onQuerySuccess方法,在此方法中得到我们需要的数据并且执行我们需要的操作。
在本例中,我们四秒后将name传过去,并展示在textView上面。
简单使用rxjava,告别繁琐的接口回调(1)
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。