Android中的接口的使用举例
这里讲解了两种大家可以在学习Android中容易对接口迷茫的两种用法
1.用于回调
我们会在子线程中执行耗时操作,就可以用接口进行耗时操作结果的回调;
首先定义一个接口
public interface OnNetInfoCallback {//获取信息成功void onSuccess(String info);//获取信息失败void onFailure();
}
在该类中我们进行模拟耗时操作,用接口进行结果的回调
第一种写法:
可以看到在该类中定义了接口的实例,然后给其赋值,最后在getInfo方法中,用这个接口进行了结果的回调
public class InfoService {private OnNetInfoCallback onNetInfoCallback;public void setOnNetInfoCallback(OnNetInfoCallback onInfoFetchCallback) {this.onNetInfoCallback = onInfoFetchCallback;}public void getInfo() {Thread thread = new Thread(new Runnable() {@Overridepublic void run() {try {Thread.sleep(1000);onNetInfoCallback.onSuccess("" + new Date());} catch (Exception e) {onNetInfoCallback.onFailure();}}});thread.start();}
}
我们在MAinActivity中,对回调的结果进行处理,并且调用getInfo让其返回结果,
button.setOnClickListener(view -> {InfoService infoService = new InfoService();infoService.setOnNetInfoCallback(new OnNetInfoCallback() {@Overridepublic void onSuccess(String info) {Log.e("TAG", "onSuccess: " + info );}@Overridepublic void onFailure() {}});infoService.getInfo();});
第二种写法(更简洁)
直接可以把接口就放在方法参数中
可以看到在该类中的getInfo方法中,接收了一个接口函数
public class InfoService {public void getInfo(OnNetInfoCallback onInfoFetchCallback) {Thread thread = new Thread(new Runnable() {@Overridepublic void run() {try {Thread.sleep(1000);onInfoFetchCallback.onSuccess("" + new Date());} catch (Exception e) {onInfoFetchCallback.onFailure();}}});thread.start();}
}
然后我们就可以在Activity中调用了该类的方法,并传入一个接口对象,然后实现在接收到回调结果之后做什么UI操作
button.setOnClickListener(view -> {InfoService infoService = new InfoService();infoService.getInfo(new OnNetInfoCallback() {@Overridepublic void onSuccess(String info) {Log.e("TAG", "onSuccess: "+info );}@Overridepublic void onFailure() {}});});
2.在MVP中使用
比如我现在有一个MainActivity,想要使用MVP模式,举一个最简单的例子
首先定义一个interface叫做xxxContract,可以理解为接口的集合接口
这个接口里面又包括了关于控制View变化的接口MainView 和 控制逻辑的接口MainPresenter,即常说的P层
public interface MainContract {interface MainView{void refreshText(String str);}interface MainPresenter{void updateText(String str);}
}
然后我们去实现具体的Presenter,在这个里面可以用于实现具体的逻辑,以及控制什么时候去调用更新UI的接口
也就是说我们的MainView中的什么时候去实现是由MainPresenter去决定的
public class MainPresenter implements MainContract.MainPresenter{MainContract.MainView mainView;public MainPresenter(MainContract.MainView mainView){this.mainView = mainView;}@Overridepublic void updateText(String str) {mainView.refreshText(str);}
}
然后我们将MainActivity实现控制UI的接口,将this传入presenter的参数中,意味着当前MainActivity是MainView的实现类,在Persenter里面进行的操作会在MainActivity也进行
然后在其实现的接口中进行具体的UI操作即可
public class MainActivity extends AppCompatActivity implements MainContract.MainView{private Button button;MainPresenter presenter;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);presenter = new MainPresenter(this);button = findViewById(R.id.button);button.setOnClickListener(view ->{presenter.updateText("new string");});}@Overridepublic void refreshText(String str) {button.setText(str);}
}
可能会有人说:那MVP这么麻烦,就是一个修改button字符串就写了这么多代码有什么好处?
其实MVP的好处就是将逻辑和view层分开,我们在activity写逻辑的话可能代码很乱,这里一块那里一块,代码多且乱,想改必须得全篇搞懂原有代码
而使用了MVP之后,不仅可以有接口直接表明这个方法是干嘛的,而且逻辑和UI的逻辑分离,代码不乱,想改哪一部分可以直接改。
Android中的接口的使用举例相关推荐
- Android中Parcelable接口用法
-- 通过writeToParcel将你的对象映射成Parcel对象,再通过createFromParcel将Parcel对象映射成你的对象.也可以将Parcel看成是一个流,通过writeToPa ...
- Android 中的接口回调
Android 中的接口回调 转载于:https://www.cnblogs.com/zhujiabin/p/5223806.html
- Android中Parcelable接口用法 和 Serializable实现与Parcelabel实现的区别
1. Parcelable接口 Interface for classes whose instances can be written to and restored from a Parcel. ...
- Android中Parcelable接口的应用
在前面的一篇文章<基于Android应用开发的跨进程通信实现(IPC)>介绍了通过跨进程实现基本数值类型(String)的传递,但是有的时候,需要跨进程实现传递相对较复杂的数据(比如图片之 ...
- android 自定义接口,Android中定义接口的用法
1.接口方法用于回调 (这里定义接口是为了使用其接口方法): public interface ICallback { public void func(); } public class Calle ...
- Android中Parcelable与Serializable接口用法
转自: Android中Parcelable接口用法 1. Parcelable接口 Interface for classes whose instances can be written to a ...
- Android中的数据传递之Parcelable接口
对于Android来说传递复杂类型,主要是将自己的类转换为基础的字节数组,Activity之间传递数据是通过Intent实现的. Android序列化对象主要有两种方法,实现Serializable接 ...
- 接口文档示例_在示例中使用Android中的Work Manager
接口文档示例 在本文中,我们将介绍如何在android中使用工作管理器. 工作管理器是android体系结构组件的一部分,并且可以很好地替代所有先前的调度选项. 其他调度选项,例如JobSchedul ...
- Android中的Parcelable接口和Serializable用法和区别
Parcelable接口: Interface for classes whose instances can be written to and restored from a Parcel. Cl ...
最新文章
- 网站运营活动总结报告模板
- 无监督学习 k-means_无监督学习-第2部分
- 小森林顺序_这篇微推价值过亿!仁恒公园世纪二期选房顺序“摇号”,1:7!
- python的认识从唯物主义_你对唯物主义的看法是怎么样的?
- 基于jquery的全局ajax函数处理session过期后的ajax操作
- 我不应该用计算机做题,超级计算器:能帮你做题的计算器,就是它了
- 完美池宇峰畅谈创业点滴 男怕入错行
- WINDOWS SERVER 2008/win7 搜索文件内容的方法
- UVM中uvm_sequencer的方法总结
- 优化源于99%的试验和1%的数据决策力
- Smt贴片加工出现元件立碑的解决方法
- SSD1963 LCD驱动 FSMC接口,stm32f207【未完】
- JSP, Servlet常见面试题详解
- 雅思机考经验和考试内容(上海机考中心20191208)
- 易语言c源码流程图怎么实现,易语言APC内存注入主要流程源码
- 【Python全栈100天学习笔记】Day41 Django快速上手
- XML Publisher 模板开发小技巧
- FineReport年份控件
- 网红模块ESP8266与墨水屏e-Paper 的结合,实现网络刷新内容。
- 用爬虫收集网站公开数据丨Python爬虫实战系列(5)
热门文章
- 马上大四了,秋招还是春招好?先找工作还是找实习
- LeetCode 1010. Pairs of Songs With Total Durations Divisible by 60
- 遥感原始图像计算机格式,卫星遥感影像数据是什么样格式的?
- 服务器系统浏览器打不开,电脑浏览器打不开解决方法
- python爬虫批量下载“简谱”
- 2018年人工智能领域研发热点回眸
- C语言程序设计现代方法(第二版)十二章编程题答案
- 如何用Python一键修改上万个文件名
- 什么是云渲染?为什么要用电脑渲图?
- oracle 归档日志 重做日志,Oracle的重做日志和归档日志