接口

作者: 往事一块六毛八 | 来源:发表于2017-02-09 13:37 被阅读7次

接口的定义

一: 接口是抽象类的一种,只包含常量和方法的定义,而没有变量跟具体方法的实现,而且其方法都是抽象方法。他的作用体现在一下几个方面:

  • (1)通过接口实现不相关类的相同行为,而无须考虑这些类之间的关系
  • (2)通过接口指明多个类需要实现的方法
  • (3)通过接口了解对象的交互界面,而无须了解对象所对应的类

二:接口的声明

[public] interface 接口名  [extends父接口名] {
  void 方法名();//接口体
}

//extends 子句与类声明的extends 子句基本相同,不同的是一个接口可有多个父类接口,用哪个逗号隔开,而一个类只能有一个父类
//在类的声明中用implements 子句来表示一个类使用某个接口,在类中可以实现接口中定义的常乐,而且必须实现接口中定义的所有方法

三:接口的理解
核心思想:在于它可以具有很多类都需要实现的功能,使用相同接口的类之间不一定有继承关系,在具体实现中实现各自的功能

四:接口回调

interface People {
    void peopleList();
}
 
class Student implements People {
    publicvoid peopleList() {
       System.out.println("I’m a student.");
    }
}
 
class Teacher implements People {
    publicvoid peopleList() {
       System.out.println("I’m a teacher.");
    }
}
 
public class Example {
    public static void main(String args[]) {
       People a; // 声明接口变量
       a = new Student(); // 实例化,接口变量中存放对象的引用
       a.peopleList(); // 接口回调
       a = new Teacher(); // 实例化,接口变量中存放对象的引用
       a.peopleList(); // 接口回调
    }
}

接口回调是指:
  可以把使用实现了某一接口的类创建的对象的引用赋给该接口声明的接口变量,
  那么该接口变量就可以调用被类实现的接口的方法
  。实际上,当接口变量调用被类实现的接口中的方法时,就是通知相应的对象调用接口的方法,这一过程称  为对象功能的接口回调。

五:模板代码

//1 定义接口
private MyListener myListener;  
  
public interface MyListener {  
    //通过抽象方法的参数传递数据的  
    void getData(Response res);  
}  
  
//回调方法  
public void setOnListener(MyListener myListener) {  
    this.myListener = myListener;  
} 

//2通过接口引用为抽象方法赋值
myListener.getData(Response res); 

//3 在另一个类中的某个方法中getNetData()进行回调网络请求结果
CarGoodsFragment carGoodsFragment = CarGoodsFragment.getInstance("陈如水", 22);  
carGoodsFragment.setOnListener(this);  

流程是:
1)定义接口: 定义一个接口、定义其中的抽象方法、抽象方法含有参数(被传递的数据);
2)编写回调方法: 在定义接口的类中,编写用户回调的方法,要传递一个接口对象实例,让别的类去实现。(相当于为接口成员变量赋值)
3)为抽象方法赋值: 获取一个全局的接口成员变量,在某个事件中使用接口成员变量调用接口中的方法,并且为抽象方法中的参数赋值。(这一步可以在回调方法中实现)


在另一个页面,在合适的时机,创建此类的实例,调用类中的回调方法,为接口对象赋值this,即可实现回调。

登录模块:点击事件中的方法

private void Login() {  
    //获取用户输入的参数  
    String pwd = et_pwd.getText().toString();  
    String login_name_put = et_login_name.getText().toString();  
  
    if (login_name_put == null || "".equals(login_name_put)) {  
        ToastUtils.showShort("请输入登录帐号");  
    } else if (pwd == null || "".equals(pwd)) {  
        ToastUtils.showShort("请输入登录密码");  
    } else {  
        HashMap<String, String> paramsMap = new HashMap<>();  
        //获取请求参数  
        paramsMap.put("login_name", login_name_put);  
        paramsMap.put("pwd", pwd);  
        HashMap<String, String> dataMap = ParamsUtils.getParamsMap(paramsMap);  
          
 //调取服务器端接口(网络请求业务类)  
        LoginManager loginManager = new LoginManager();  
        loginManager.login(LoginUI.this, LoginUI.this, dataMap);  
    }  
}  

实现接口,实现接口中的抽象方法:

@Override  
public void loginSuccess(LoginEntity loginStatus) {  
    ToastUtils.showShort("登录成功");  
  
    //1,是否是第一次登录app  
    SPUtils.put(LoginUI.this, "LOGIN_STATE_FIRST", "2");  
    //2,存储获取到的SID  
    SPUtils.put(LoginUI.this, "SID", loginStatus.getSid());  
    //3,存储用户ID  
    SPUtils.put(LoginUI.this, "USER_ID", loginStatus.getId());  
    //4,保存用户的登录状态  
    SPUtils.put(LoginUI.this, "LOGIN_STATE", true);  
  
    //登录成功,直接进行页面跳转  
    startActivity(new Intent(LoginUI.this, MainUI.class));  
  
    finish();  
}  
  
@Override  
public void loginFail(String msg) {  
    loadFail(msg);  
}  

LoginManager里面的业务逻辑

public class LoginManager {  
  
    public static void login(final LoginDataListener loginDataListener, Activity activity, Map<String, String> dataMap) {  
        NetUtils.addRequest(new GsonRequest<LoginEntity>  
                (  
                        Request.Method.POST,//请求方式  
                        Constant.LOGIN,//请求地址  
                        LoginEntity.class,//返回实体类的封装  
                        dataMap,//请求参数  
                        new Response.Listener<LoginEntity>() {  
                            @Override  
                            public void onResponse(LoginEntity response) {  
                                //在这里要判断响应码  
                                if (response.isSuccess()) {  
                                    loginDataListener.loginSuccess(response);  
                                } else {  
                                    loginDataListener.loginFail(TextUtils.isEmpty(response.getMessage()) ? "获取数据失败" : response.getMessage());  
                                }  
                            }  
                        },  
                        new Response.ErrorListener() {  
                            @Override  
                            public void onErrorResponse(VolleyError error) {  
                                LogUtils.i("test", error.getMessage());  
                            }  
                        }  
                ), activity);  
    }  
  
    public interface LoginDataListener {  
        //激活成功后的数据  
        void loginSuccess(LoginEntity loginStatus);  
        void loginFail(String msg);  
    }  
} 

http://blog.csdn.net/chenrushui/article/details/52053600

相关文章

  • 接口接口接口

    发现很多朋友对于接口都很纠结,阐述一下个人对接口的理解。 接口分为很多种类型,程序语言内部接口 移动端和服务端接口...

  • Android常用接口

    不知名接口 头条接口: 科技接口: 财经接口: 军事接口: 体育接口: 房产接口: 足球接口: 娱乐接口: 电影接...

  • 第十八天 微信微博天气接口

    分享接口 微信接口 微博接口 天气接口 mob接口

  • 接口测试概述

    接口(interface)的概念 常见接口名词 接口测试: 接口测试目的: 接口测试的重要性: 接口测试流程 接口...

  • 接口测试

    接口测试概念: 接口:接口是为了提供一种服务 所有的接口统称为API,接口分为内部接口和外部接口 外部接口:测试被...

  • 接口

    接口 接口类型 空接口 接口嵌套 接口断言 type关键字

  • 线程池原理

    Callable 接口 Runnable 接口 Future接口 RunnableFuture 接口 Future...

  • JMeter-一个接口的返回值作为输入传给其他接口

    背景: 在用JMeter写接口case,遇到一种情况,接口1查看列表接口,接口2查看详情接口,接口2需要传入接口1...

  • 用户操作接口

    登陆 接口地址 获取列表 接口地址 删除 接口地址 批量删除 接口地址 编辑用户 接口地址 添加用户 接口地址

  • JAVA中的集合框架 List (二)

    Collection接口List接口简介 Collection接口、子接口及其实现类,Collection接口是j...

网友评论

      本文标题:接口

      本文链接:https://www.haomeiwen.com/subject/xhmbittx.html