MVP入门,接口回调两种实现,new接口和implement实现,okhttpclient

OkHttp3初探:基本使用方法 目录 一、简介 二、基本用法 1、添加依赖 2、使用 2.1 创建客户端对象 2.2 创建Request对象 2.3 生成网络请求对象 2.4 发起网络请求 2.5 示例 三、补充知识 3.1 RequestBody 3.2 Response 四、主要参考 一、简介 OkHttp3是由square公司负责日常维护的开源项目,GitHub地址:https://githu... 阅读详情


activity_main.xml布局

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    >

    <EditText
        android:id="@+id/phone"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />

    <EditText
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/password"
        />

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/login"
        android:text="login"
        />
</LinearLayout>

登录判断的接口

public interface LoginCallBack {
    //接口,,

    //手机号码为空
    public void phoneEmpty();
    //密码为空
    public void passwordEmpty();
    //登录为空
    public void loginSuccess(Object object);
    //登录失败
    public void loginFailed(int code);
}

model里面的接口

public interface ModelCallBack {
    //model的接口.,
    public void success(String data);
    public void failed(int code);
}

MainActivity里面的 UI(view)

public class MainActivity extends AppCompatActivity implements LoginCallBack, View.OnClickListener {


    private LoginPresenter loginPresenter;
    private Button btn;
    private EditText password;
    private EditText phone;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        password = (EditText) findViewById(R.id.password);
        phone = (EditText) findViewById(R.id.phone);
        btn = (Button) findViewById(R.id.login);
        //因为这是view层,只能通过presenter来和model联系,所以需要new出presenter
        //new出presenter对象,因为实现了接口,所以需要传当前的上下文,也就是接口
        loginPresenter = new LoginPresenter(this);

        btn.setOnClickListener(this);
    }



    //登录按钮的点击事件
    public void onClick(View view) {

        //上面已经new出来了presenter
        //这是mainActivity只能写UI的代码,,而逻辑代码需要写在presenter里面,,类名.调用
        loginPresenter.loginPanduan(phone.getText().toString(),password.getText().toString());
    }

    //以下是实现接口重写的方法,
    @Override
    public void phoneEmpty() {
       //已经受presenter的loginPanduan方法里面逻辑代码的调用,吐司
        Toast.makeText(this, "phone is empty", Toast.LENGTH_SHORT).show();
    }

    @Override
    public void passwordEmpty() {
        //已经受presenter的loginPanduan方法里面逻辑代码的调用,吐司
        Toast.makeText(this, "password is empty", Toast.LENGTH_SHORT).show();
    }

    @Override
    public void loginSuccess(final Object object) {
    //返回来的是子线程里的 需要开启子线程
        runOnUiThread(new Runnable() {
            @Override
            public void run() {
                Toast.makeText(MainActivity.this, object+"", Toast.LENGTH_SHORT).show();

            }
        });
    }

    @Override
    public void loginFailed(int code) {
        //返回来的是子线程里的 需要开启子线程
        runOnUiThread(new Runnable() {
            @Override
            public void run() {
                Toast.makeText(MainActivity.this, "loginFailed", Toast.LENGTH_SHORT).show();

            }
        });
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();

        loginPresenter.detach();
    }
}

Presenter 里面的 逻辑代码

public class LoginPresenter {
    //new出来model对象,presenter可以和model取得联系,model里面是请求网络数据的,数据库等等
     private LoginModel loginModel = new LoginModel();

    //当前传来的 参数是上下文,实现了接口以后,传来的就是接口
    LoginCallBack loginCallBack;
    public LoginPresenter(LoginCallBack loginCallBack) {
         this.loginCallBack = loginCallBack;
    }


    //presenter里面的方法
    public void loginPanduan(String phone, String password) {
        //这里面是逻辑代码,判断输入框是否合法
        if(TextUtils.isEmpty(phone)){
            //接口回调,调用avtivity也就是view里面已经实现了的接口的方法
            loginCallBack.phoneEmpty();
            return;
        }
        if(TextUtils.isEmpty(password)){
            loginCallBack.passwordEmpty();
            return;
        }

        //请求网络数据的方法在model里面,,类名·调用
        loginModel.getData(phone,password, new ModelCallBack() {
            @Override
            //重写modelCallBack里面2个的方法
            public void success(String data) {
               //拿到了model里面的okhttp,success里面返回的data是string数据
                //UI的改变需要在activity里面
                loginCallBack.loginSuccess(data);
            }

            @Override
            public void failed(int code) {
                //拿到了model里面okhttp,failed里面的返回的code是1
                //UI的改变需要在activity里面
                loginCallBack.loginFailed(code);
            }
        });
    }


    //防止内存泄露
    public void detach(){
        this.loginCallBack = null;
    }
}

Model里面的 请求网络数据,数据库的操作

public class LoginModel {

    //model里面是请求网络数据的方法,,,getData
    public void getData(String phone, String password, final ModelCallBack modelCallBack) {
        //使用OKHttpclient
        OkHttpClient client = new OkHttpClient();

        //post请求方式,需要传入一个requestbody
        RequestBody body = new FormBody.Builder()
                .add("pscid","39")
                .add("page","1")
                .build();

        Request request = new Request.Builder()
                .post(body)
                .url("http://120.27.23.105/product/getProducts")
                .build();

        //异步请求,,在子线程里
        client.newCall(request).enqueue(new Callback() {
            @Override
            public void onFailure(Call call, IOException e) {
                //回调modelcallback里面的接口,,将1传过去presenter
                modelCallBack.failed(1);
            }

            @Override
            public void onResponse(Call call, Response response) throws IOException {
                String data = response.body().string();
                //回调modelcallback里面的接口,,将请求到的数据传回去presenter
                modelCallBack.success(data);
            }
        });

    }
}
基本使用——OkHttp3详细使用教程 概述 OkHttp现在应该算是最火的Http第三方库,Retrofit底层也是使用OkHttp,网上很多教程都写的不错,但是有些我认为重要的知识,大多一笔带过,所以我决定写一篇入门文章 OkHttp官网地址:http://square.github.io/okhttp/ OkHttp GitHub地址:https://github.com/square/okhttp 出现背景 网络... 阅读详情

相关推荐

Android 内存优化(四) —— 未取消注册或回调导致内存泄露

未取消注册或回调导致内存泄露 比如我们在 Activity 中注册广播,如果在 Activity 销毁后不取消注册,那么这个刚播会一直存在 系统中,同上面所说的非静态内部类一样持有 Activity 引用,导致内存泄露。因此注册广播后在 Activity 销毁后一定要取消注册。 public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInst

chali1314的博客 3254

Android网络编程——OkHttp的使用

首先我们需要去到官网查看如何引入okHttp https://square.github.io/okhttp/#releases 如图所示,将以下内容加入到build.gradle文件内,然后点击右上方的同步按钮,这样我们就引入了okHttp的依赖了 implementation("com.squareup.okhttp3:okhttp:4.9.0") 如果遇到启动时报错:Class module-info is missing a super type.请降低okhttp的版本,我这里...

呼叫冰河谷博客 1097

bugku渗透测试4-writeup

三、对这个主机进行全端口的扫描,发现存在22000 ssh端口,那么可以联想到时redis写入公钥来连接主机。又来了一个新的靶场,这个靶场打下来我觉得关键就是信息收集,走了很多的弯路。八、最后一个flag是要去看cms的数据库里面,这个数据库是sqlite。把这个数据库下载下来,登录密码是加密的,就直接用token。一、入口的漏洞是在登录的时候去抓包,修改action的值。六、没想到这个第一台机器的密码,在第二台里面。七、扫描第一台主机、使用之前的密码连接成功。获取最后一台主机的root密码。

vsdfbhsdhsdfh的博客 1298

Android接口回调interfaceCallBack

首先,查看别人和结合自己理解的interface: 1,Java是继承机制的,接口可以实现多个,可以弥补这个缺点,提高各个类的拓展性; 2,接口回调,传值用的,灵活的应用可以使代码飘逸多变,这个也是一直纠结于接口理解的原因。 这边只想简单说说最基本的接口回调, 首先定义一个,里面含有某抽象方法,方法里面需要参数;  其次在某个位置调用接口中的这个方法,对参数进行复制;  最后在

qq_31450487的博客 1760

紫光同创PGL50H开发板实战:盘古50KH视频板的多媒体处理与高速通信方案

本文详细介绍了基于紫光同创PGL50H FPGA芯片的盘古50KH视频开发板在多媒体处理与高速通信方面的实战应用。文章从开发板硬件架构解析入手,逐步指导开发环境搭建、DDR3内存控制器配置、HDMI视频输入输出实战,并重点探讨了利用板载HSST高速收发器实现光纤通信与万兆以太网的方案。最后,通过构建一个集多路视频采集、处理与光纤传输于一体的系统案例,展示了该开发板在高性能实时数据处理领域的强大潜力。

b9c0d的博客 485

采用MPU6050的手势遥控器

随着社会的发展与进步,电子产品日益更新,个人家庭迎来了越来越多的智能家电。然而,现在的智能电子设备产品的遥控器多数都是按键形的。操作繁琐不直观,学习成本大。并且对于有老人小孩的家庭,给他们的操作带来了巨大的障碍。手势遥控器是指利用简单的手势来指挥电子设备,获得便捷的操作体验。让家庭成员都可以享受科技发展带来的福利。MPU6050是一个运动传感器,内置陀螺仪,再由电子设备利用判断结果做出相应的响应即...

Sakura的博客小站 6602

OkHttp的基本使用

OkHttp是由square公司开发,Android中公认最好用的网络请求框架,在接口封装上做的简单易用它由以下默认特性支持HTTP/2,允许所有同一个主机地址的请求共享同一个socket连接使用连接池减少请求延时透明的GZIP压缩减少响应数据的大小缓存响应内容,避免一些完全重复的请求出现一般的网络问题时OkHttp 会自动恢复:如果你的服务有多个IP地址,当第一个IP请求失败时,OkHttp会尝试你配置的其他IP。

qq_45793637的博客 1796

重塑计算的五层蛋糕:解读黄仁勋CES2026演讲背后的AI新秩序与物理世界

2026年CES演讲揭示AI新纪元:从语言模型到物理智能 NVIDIA CEO黄仁勋在2026年CES演讲中描绘了计算产业的根本性变革。核心突破包括: 计算范式转移:从指令执行转向意图理解,智能体系统崛起 物理AI突破:发布Cosmos世界模型,通过合成数据训练AI理解物理定律 全新VeraRubin计算平台:6芯片协同设计,解决摩尔定律放缓与AI需求增长的矛盾 自动驾驶革命:推出具备推理能力的Alpamayo模型,实现L4级自动驾驶 演讲标志着AI正从数字世界迈向物理世界,NVIDIA通过全栈布局,正在重

老孙 | Ethan Sun 的博客:AI 智能体与 AI 原生软件的工程实践 1274

MVP入门,接口回调new接口和implement实现,防止内存泄露解绑

activity_main.xml布局 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android

thw_m的博客 1029

UVM环境复位--stop_sequences()

在UVM验证环境中, stop_sequences是一个用于强制终止所有正在运行的 Sequence 的方法,通常用于动态控制激励生成流程。1.通过uvm_config_db传递事件和严格的同步机制,此方案符适用于复杂复位场景和动态测试控制。组件耦合:Driver 和 Sequence 不再直接依赖env,通过标准接口通信。竞争条件:确保 Driver 完成清理后再终止 Sequence。代码健壮性:使用非阻塞操作和事件监听,避免死锁。

qq_42779035的博客 3014

电商秒杀场景下,如何用Redis+Lua脚本实现原子性库存扣减(附完整代码)

本文针对电商秒杀场景下的高并发与超卖难题,详细解析了如何利用Redis的原子性命令与Lua脚本实现可靠的库存扣减。通过对比多种方案,阐述了Redis+Lua作为黄金搭档的技术原理,并提供了从基础扣减到预扣减模型的完整代码实现,确保在高并发下数据的一致性与系统性能。

weixin_29219539的博客 503

接口回调

接口回调 编辑 讨论 本词条缺少概述图,补充相关内容使词条更完整,还能快速升级,赶紧来编辑吧! 接口回调和上转型是设计模式的解耦核心,可以说几乎所有的模式都是建立在这两者的应用之上的。 中文名 接口回调 外文名 interface callback 目录 1 概述 2 实例 概述 编辑 接口回调其本质与上转型是一样的,不同的是:接口回调是用接口句柄来得到并调用实现这个接口的子类的引用;而上转型则是...

weixin_43771664的博客 229

英飞凌TLF35584 SBC实战:手把手教你配置WDG看门狗与ERR监控(基于AUTOSAR架构)

本文详细介绍了基于AUTOSAR架构的英飞凌TLF35584 SBC芯片WDG看门狗与ERR监控功能的配置方法。通过硬件平台搭建、寄存器级配置、AUTOSAR模块集成及诊断策略优化,帮助开发者快速掌握关键配置技巧,提升嵌入式系统的安全性和可靠性。

weixin_30256901的博客 477

回顾接口回调:Interface CallBack 两种简单小思维

接口回调两种写法: 1.单独接口 2.接口写在内部

农展飞的博客 5581

VC Spyglass CDC实战:从TCL脚本到SDC约束的完整避坑指南

本文是一份针对数字IC验证工程师的VC Spyglass CDC实战指南。文章详细阐述了从TCL脚本环境搭建、SDC约束编写到典型CDC违规(如SETUP_PORT_UNCONSTRAINED)诊断与修复的完整流程,旨在帮助读者高效避坑,深入理解工具逻辑,从而完成可靠的时钟域交叉验证。

go5gopher的博客 383

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

默认生成的接口实现方法体的问题

随着集成开发环境越来越强大,编程开发工作也变得越来越高效,很多的代码都不需要逐字输入,可以利用代码生成和自动补全来辅助开发。但是这样的便利也可能引起一些疏忽,本文就Java开发中默认生成的接口实现方法来谈谈以前遇到的问题。

乐征skyline 575

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

android接口回调详解、简单例子+复杂例子

使用接口的核心原因:为了能够向上转型为多个基类型。即利用接口的多实现,可向上转型为多个接口基类型。 1.接口回调是什么? 接口回调是指:可以把使用某一接口的类创建的对象的引用赋给该接口声明的接口变量,那么该接口变量就可以调用被类实现的接口的方法。实际上,当接口变量调用被类实现的接口中的方法时,就是通知相应的对象调用接口的方法,这一过程称为对象功能的接口回调。看下面示例。 接口

丶ban 2万+

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

接口(interface、implement)

接口 接口:interface 接口的类中 所有的属性默认为:public static final 所有的方法默认为:public abstract 在jdk1.8之前只能定义静态的常量和公共的抽象方法,在jdk1.8之后就可以定义静态方法和默认方法 (常量一般都建议使用大写字母) 特性 ● 接口不可以被实例化 ● 实现类必须重写接口的所有方法(抽象的方法) ● 实现类可以实现多个接口 ● 接口中的变量都是静态常量 ...

古城的博客 3157

android调用java接口_java/Android 接口调用的几种写法

虽然Handler用的地方比较普遍,但是接口也有他的独特之处,比较直观,然后降低了耦合性如有一接口,需要将数据传给使用的activity中,接口如下public interfacePushValue {void push(byte v,bytev2);}1:判断context是否继承并通知调用接口if(context instanceofPushValue){((PushValue)context...

weixin_39982269的博客 1373

okhttp3的使用和封装

1.依赖(okhttp3里面是依赖于okio进行开发的,所以务必将okio也引入) implementation 'com.squareup.okhttp3:okhttp:3.7.0' implementation 'com.squareup.okio:okio:1.12.0' 2.权限 <uses-permission android:name="android.permis...

lumingzhang的博客 2211

OkHttp接入、简单使用、封装

OkHttp接入、简单使用一、接入接入方式1-maven2-gradle3-下载二、使用1.get2.post3.下载三、封装 一、接入 先看文档okhttp 接入方式 1-maven &amp;amp;amp;lt;dependency&amp;amp;amp;gt; &amp;amp;amp;lt;groupId&amp;amp;amp;gt;com.squareup.okhttp3&amp;amp;amp;lt;/groupId&amp;amp;am

Wubo的博客 1418

Android中使用OkHttp的五种请求方式及注意事项

OkHttp的使用一、环境说明1、在gradle中引入依赖2、AndroidManifest中开启网络权限3、搭建测试接口4、编写OkHttp工具类二、发送请求1.发送无参的Get请求2.发送有参的Get请求3、发送无参Post请求4.发送有参Pos请求5.发送Post 的Json数据 一、环境说明 1、在gradle中引入依赖 implementation 'com.squareup.okhttp3:okhttp:3.12.1' debugImplementation 'com.squa

Android_Cob的博客 7682

安卓端和后端数据交互之OkHttp3的使用

接触安卓也有一段时间了。无论前后端数据交互,还是安卓端和后端的数据交互都是一样的道理。最基础的发送json,解析json。 一、最先接触到就是okhttp,今天抽个时间来总结一下okhttp的使用吧。盗用一下网上的介绍(手动滑稽) okhttp简介: HTTP是现代应用常用的一种交换数据和媒体的网络方式,高效地使用HTTP能让资源加载更快,节省带宽。OkHttp是一个高效的HTTP客户端,它...

Mr_Van的博客 4267

Android mvp接口回调

回调讲道理最近这几天回调块把我搞疯了,貌似终于看懂了。(网上的例子有时候就是比较坑) *先说一个一般回调的意思 *就是 A中调用B中的某个方法,B又调用A中的方法将结果传给了A *这样做A必须有一个B的实例B中必须有A的实例。 大家都喜欢用打电话的例子,好吧,为了跟上时代,我也用这个例子好了,我这个例子采用异步加回调 //网上复制的这个例子 简单的这个例子不错 有一天小王遇到

qq_33329316的博客 457

android mvp模式下多个类继承单接口,数据同时回调打印

activity mvp 单接口多类继承

Mr___Z的博客 606

使用回调接口解决匿名实现Runnable导致的内存泄漏问题

使用回调接口解决匿名实现Runnable内存泄漏的问题 在Android开发中经常会看到这样的代码: public class MyActivity extends Activity { ... new Thread(new Runnable() { @Override public void run() { //具体...

轻风起自远东 4792
上一篇: 二维码的应用,扫描二维码和生成二维码,使用回传值,导入依赖
下一篇: 自定义弧形进度条,百分比的值在变化
Developer_Sir
博客等级 码龄9年 3粉丝 24原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值