上一遍文章中写了接口回调的模板,这篇文章用rxjava来实现接口回调的功能
(接口回调:http://blog.csdn.net/michael1112/article/details/53573830)
1. 结构
2. gradle
dependencies { compile fileTree(dir: 'libs', include: ['*.jar']) testCompile 'junit:junit:4.12' compile 'com.android.support:appcompat-v7:25.0.0' compile 'io.reactivex:rxandroid:1.2.1' compile 'io.reactivex:rxjava:1.1.6' }
3.MainActivity.java
package callback.jdjz.com.rxjava_replace_callback; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.util.Log; import android.view.View; import android.widget.Button; import rx.Observable; import rx.Subscriber; import rx.android.schedulers.AndroidSchedulers; import rx.functions.Action1; import rx.schedulers.Schedulers; import android.net.Uri; import rx.functions.Action1; public class MainActivity extends AppCompatActivity { Button button; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); button = (Button) findViewById(R.id.btn_rxjava); final ManagerFields managerFields = new ManagerFields(this); Log.d("MainActivity","Thread Name:"+Thread.currentThread().getName().toString()+ " \n Thread id:"+Thread.currentThread().getId()); final Observable observable = Observable.create(new Observable.OnSubscribe<Long>(){ @Override public void call(Subscriber<? super Long> subscriber) { Long bjtime = TimeUtil.getBJTime(); subscriber.onNext(bjtime); subscriber.onCompleted(); } }).subscribeOn(Schedulers.io()); button.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { observable.observeOn(AndroidSchedulers.mainThread()) .subscribe(new Action1<Long>() { @Override public void call(Long bjtime) { managerFields.doSomething(bjtime); } }); } }); } }
3. ManagerFields.java
package callback.jdjz.com.rxjava_replace_callback; import android.content.Context; import android.util.Log; /** * Created by tchl on 2016-12-12. */ public class ManagerFields { Context mContext; public ManagerFields(Context mContext) { this.mContext = mContext; } public void doSomething(long bjTime){ Log.d("ManagerFields","Thread Name:"+Thread.currentThread().getName().toString()+ " \n Thread id:"+Thread.currentThread().getId()); Log.d("ManagerFields","Time :"+bjTime); } }
4, TimeUtil.java
package callback.jdjz.com.rxjava_replace_callback; import android.util.Log; import java.io.IOException; import java.net.MalformedURLException; import java.net.URL; import java.net.URLConnection; import java.util.Date; /** * Created by tchl on 2016-12-12. */ public class TimeUtil { static Long getBJTime() { URL url = null; try { url = new URL("http://www.baidu.com"); } catch (MalformedURLException e) { e.printStackTrace(); } URLConnection uc = null;// 生成连接对象 try { uc = url.openConnection(); } catch (IOException e) { e.printStackTrace(); } try { uc.connect(); // 发出连接 } catch (IOException e) { e.printStackTrace(); } long ld = uc.getDate(); // 取得网站日期时间 Date date = new Date(ld); // 转换为标准时间对象 // 分别取得时间中的小时,分钟和秒,并输出 Log.d("TimeUtil","Thread Name:"+Thread.currentThread().getName().toString()+ " \n Thread id:"+Thread.currentThread().getId()); return date.getTime(); } }
5。 GIT:https://github.com/whtchl/TemplateRxjavaReplaceCallBack