您的位置:首页 > 移动开发 > Android开发

Android接口回调一

2016-08-17 16:35 148 查看
在安卓开发当中,接口的回调机制也是很常见的。先说一下什么是接口?就相当于一个监听回调。官方是这样解释的:类A中调用B类的中方法C,而B又反过去调用A中的方法D,然后D称为A的回调方法。是不是感觉心中一万匹操尼玛在奔腾!说了些啥?让我来说:就是2个类(A和B),一个接口。A让B去干一件事,当然这件事可能是耗时的(比如网络请求),然后告诉B,干完了以后通知我,并把结果告诉我!就这么简单~~

下面以一个用户登录界面为例,用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();//网络链接异常的回调函数
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: