zoukankan      html  css  js  c++  java
  • 简单使用EventBus,告别繁琐的接口回调(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上面。

  • 相关阅读:
    Songbird:一边上网,一边听歌
    利用 Sunbird 处置你的日程表
    Automatix 2 for Ubuntu 6.10
    新的一年,新的起点~~好好干
    Delphi 2009 新增单元 Character[2]: IsLetter、IsUpper、IsLower、IsDigit、IsNumber
    重载 CreateParams 方法[2]: 重载 TForm.CreateParams 方法的几个例子
    实现无标题栏但有边框的窗口
    Delphi 2009 新增单元 Character[1]: ToUpper、ToLower 字符与字符串的大小写转换
    使用 TRegistry 类[4]: 文件打开与文件图标的关联
    ASCII 码新表 包含 Delphi 2009 的 TUnicodeCategory 分类
  • 原文地址:https://www.cnblogs.com/cherrylv/p/6432873.html
Copyright © 2011-2022 走看看