这里讲解了两种大家可以在学习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中的接口的使用举例相关推荐

  1. Android中Parcelable接口用法

    --  通过writeToParcel将你的对象映射成Parcel对象,再通过createFromParcel将Parcel对象映射成你的对象.也可以将Parcel看成是一个流,通过writeToPa ...

  2. Android 中的接口回调

    Android 中的接口回调 转载于:https://www.cnblogs.com/zhujiabin/p/5223806.html

  3. Android中Parcelable接口用法 和 Serializable实现与Parcelabel实现的区别

    1. Parcelable接口 Interface for classes whose instances can be written to and restored from a Parcel. ...

  4. Android中Parcelable接口的应用

    在前面的一篇文章<基于Android应用开发的跨进程通信实现(IPC)>介绍了通过跨进程实现基本数值类型(String)的传递,但是有的时候,需要跨进程实现传递相对较复杂的数据(比如图片之 ...

  5. android 自定义接口,Android中定义接口的用法

    1.接口方法用于回调 (这里定义接口是为了使用其接口方法): public interface ICallback { public void func(); } public class Calle ...

  6. Android中Parcelable与Serializable接口用法

    转自: Android中Parcelable接口用法 1. Parcelable接口 Interface for classes whose instances can be written to a ...

  7. Android中的数据传递之Parcelable接口

    对于Android来说传递复杂类型,主要是将自己的类转换为基础的字节数组,Activity之间传递数据是通过Intent实现的. Android序列化对象主要有两种方法,实现Serializable接 ...

  8. 接口文档示例_在示例中使用Android中的Work Manager

    接口文档示例 在本文中,我们将介绍如何在android中使用工作管理器. 工作管理器是android体系结构组件的一部分,并且可以很好地替代所有先前的调度选项. 其他调度选项,例如JobSchedul ...

  9. Android中的Parcelable接口和Serializable用法和区别

    Parcelable接口: Interface for classes whose instances can be written to and restored from a Parcel. Cl ...

最新文章

  1. 网站运营活动总结报告模板
  2. 无监督学习 k-means_无监督学习-第2部分
  3. 小森林顺序_这篇微推价值过亿!仁恒公园世纪二期选房顺序“摇号”,1:7!
  4. python的认识从唯物主义_你对唯物主义的看法是怎么样的?
  5. 基于jquery的全局ajax函数处理session过期后的ajax操作
  6. 我不应该用计算机做题,超级计算器:能帮你做题的计算器,就是它了
  7. 完美池宇峰畅谈创业点滴 男怕入错行
  8. WINDOWS SERVER 2008/win7 搜索文件内容的方法
  9. UVM中uvm_sequencer的方法总结
  10. 优化源于99%的试验和1%的数据决策力
  11. Smt贴片加工出现元件立碑的解决方法
  12. SSD1963 LCD驱动 FSMC接口,stm32f207【未完】
  13. JSP, Servlet常见面试题详解
  14. 雅思机考经验和考试内容(上海机考中心20191208)
  15. 易语言c源码流程图怎么实现,易语言APC内存注入主要流程源码
  16. 【Python全栈100天学习笔记】Day41 Django快速上手
  17. XML Publisher 模板开发小技巧
  18. FineReport年份控件
  19. 网红模块ESP8266与墨水屏e-Paper 的结合,实现网络刷新内容。
  20. 用爬虫收集网站公开数据丨Python爬虫实战系列(5)

热门文章

  1. 马上大四了,秋招还是春招好?先找工作还是找实习
  2. LeetCode 1010. Pairs of Songs With Total Durations Divisible by 60
  3. 遥感原始图像计算机格式,卫星遥感影像数据是什么样格式的?
  4. 服务器系统浏览器打不开,电脑浏览器打不开解决方法
  5. python爬虫批量下载“简谱”
  6. 2018年人工智能领域研发热点回眸
  7. C语言程序设计现代方法(第二版)十二章编程题答案
  8. 如何用Python一键修改上万个文件名
  9. 什么是云渲染?为什么要用电脑渲图?
  10. oracle 归档日志 重做日志,Oracle的重做日志和归档日志