Android接口回调一
2016-08-17 16:35
148 查看
在安卓开发当中,接口的回调机制也是很常见的。先说一下什么是接口?就相当于一个监听回调。官方是这样解释的:类A中调用B类的中方法C,而B又反过去调用A中的方法D,然后D称为A的回调方法。是不是感觉心中一万匹操尼玛在奔腾!说了些啥?让我来说:就是2个类(A和B),一个接口。A让B去干一件事,当然这件事可能是耗时的(比如网络请求),然后告诉B,干完了以后通知我,并把结果告诉我!就这么简单~~
下面以一个用户登录界面为例,用2种方式来实现回调。第一种是implements该接口,另一种是直接new内部类的形式。
简单模拟一下登录界面,是这样的
先看第一种实现:
用户请求类:
——————————————————————————————————————————————————————————————
第二种实现方式:
用户请求类:
下面以一个用户登录界面为例,用2种方式来实现回调。第一种是implements该接口,另一种是直接new内部类的形式。
简单模拟一下登录界面,是这样的
先看第一种实现:
package com.example.lenovo.demo; import android.app.Activity; import android.os.Bundle; import android.view.View; import android.widget.EditText; import http.UserRequest; import utils.SPUtil; import utils.ToastUtil; public class MainActivity extends Activity implements UserRequest.LoginListener{ private EditText phoneNumber; private EditText password; private UserRequest request; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); initView(); findViewById(R.id.login).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { SPUtil.put(MainActivity.this,"phoneNumber",phoneNumber.getText().toString()); SPUtil.put(MainActivity.this,"password",password.getText().toString()); request.userLogin(phoneNumber.getText().toString(),password.getText().toString()); } }); } private void initView() { phoneNumber = (EditText) findViewById(R.id.phoneNumber); password = (EditText) findViewById(R.id.password); request = new UserRequest(this);//实例化用户请求对象 request.setOnLoginListener(this); } @Override public void success() { ToastUtil.showShort(this,"登录成功"); } @Override public void failure() { ToastUtil.showShort(this,"手机号或密码错误"); } @Override public void netDisconnected() { ToastUtil.showShort(this,"网络链接异常,请稍后重试"); } }
用户请求类:
package http; import android.content.Context; import utils.NetUtil; import utils.SPUtil; public class UserRequest { private Context mContext; private LoginListener loginListener; public UserRequest( Context context) { mContext = context; } public void userLogin(String phoneNumber, String password){ if(NetUtil.isNetConnected(mContext)){ //这里模拟请求网络得到当初注册的手机号和密码,然后针对不同的请求结果回调不同的函数 if(SPUtil.get(mContext,"phoneNumber","").equals("123456789")&&SPUtil.get(mContext,"password","").equals("123456")){ loginListener.success(); }else { loginListener.failure(); } }else { loginListener.netDisconnected(); } } public void setOnLoginListener( LoginListener loginListener){ this.loginListener = loginListener; } public interface LoginListener{ void success();//登录成功的回调函数 void failure();//登录失败的回调函数(手机号或密码错误) void netDisconnected();//网络链接异常的回调函数 } }
——————————————————————————————————————————————————————————————
第二种实现方式:
package com.example.lenovo.demo; import android.app.Activity; import android.os.Bundle; import android.view.View; import android.widget.EditText; import http.UserRequest; import utils.SPUtil; import utils.ToastUtil; public class MainActivity extends Activity { private EditText phoneNumber; private EditText password; private UserRequest request; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); initView(); findViewById(R.id.login).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { SPUtil.put(MainActivity.this,"phoneNumber",phoneNumber.getText().toString()); SPUtil.put(MainActivity.this,"password",password.getText().toString()); request.userLogin(phoneNumber.getText().toString(), password.getText().toString(), new UserRequest.LoginListener() { @Override public void success() { ToastUtil.showShort(MainActivity.this,"登录成功"); } @Override public void failure() { ToastUtil.showShort(MainActivity.this,"手机号或密码错误"); } @Override public void netDisconnected() { ToastUtil.showShort(MainActivity.this,"网络链接异常,请稍后重试"); } }); } }); } private void initView() { phoneNumber = (EditText) findViewById(R.id.phoneNumber); password = (EditText) findViewById(R.id.password); request = new UserRequest(this);//实例化用户请求对象 } }
用户请求类:
package http; import android.content.Context; import utils.NetUtil; import utils.SPUtil; /** * Created by lenovo on 2016/8/17. * */ public class UserRequest { private Context mContext; public UserRequest( Context context) { mContext = context; } public void userLogin(String phoneNumber, String password,LoginListener loginListener){ if(NetUtil.isNetConnected(mContext)){ //这里模拟请求网络得到当初注册的手机号和密码,然后针对不同的请求结果回调不同的函数 if(SPUtil.get(mContext,"phoneNumber","").equals("123456789")&&SPUtil.get(mContext,"password","").equals("123456")){ loginListener.success(); }else { loginListener.failure(); } }else { loginListener.netDisconnected(); } } public interface LoginListener{ void success();//登录成功的回调函数 void failure();//登录失败的回调函数(手机号或密码错误) void netDisconnected();//网络链接异常的回调函数 } }
相关文章推荐
- 接口回调 ( android 应用实现)
- Android中回调接口的使用
- Android 接口回调
- 【Android 应用开发】 自定义组件 宽高适配方法, 手势监听器操作组件, 回调接口维护策略, 绘制方法分析 -- 基于 WheelView 组件分析自定义组件
- android分享到微信朋友圈的一个回调接口的注意事项
- [待修改]java接口用法:向上转型和回调函数 回调机制在 Android 监听用户界面操作中的体现
- 弄明白Android 接口回调机制
- Android 中的接口回调
- Android之图文混排(三)接口的回调
- 【Android 应用开发】 自定义组件 宽高适配方法, 手势监听器操作组件, 回调接口维护策略, 绘制方法分析 -- 基于 WheelView 组件分析自定义组件
- 解决Android中调用百度地图MKSearchListener接口回调方法不执行的问题
- Android中回调接口使用实例
- android.graphics.drawable.Drawable.Callback回调接口
- Android 接口回调机制详解
- Android 中的接口回调
- android-百度地图BDLocationListener接口未回调 - 随心
- Android中回调接口的使用
- Android 中的接口回调
- Android系列之Fragment(三)----Fragment和Activity之间的通信(含接口回调)
- 浅谈Android中用接口完美实现回调的逻辑控制