亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定

android-apidesigner是一個網絡接口封裝工具

標簽:
Android

android-apidesigner

android-apidesigner是一个网络接口封装工具,通过apidesigner,让接口变得统一的输出格式,解耦网络请求与数据解析

相关地址


设计思想

在apidesigner的设计中,完全与网络请求,数据解析进行了解藕,而是通过一个api构造器接口来自定义请求方式与结果解析,所以你使用apidesigner的同时,你可以选择用volley还是okhttp,或是自己封装的网络请求,你也可以选择使用gson还是fastjson来解析,而这些都不会影响到你对apidesigner的使用。

怎么使用呢?

你需要到用到  android_apidesigner.jar 

导入 android_apidesigner.jar 就可以开始封装你的接口了

第一步:创建接口构造器(实现APIConstructor接口),看代码

package com.liangmayong.api;

import java.util.List;

import org.json.JSONObject;

import com.liangmayong.apidesigner.entity.APIParameter;
import com.liangmayong.apidesigner.entity.APIResponse;
import com.liangmayong.apidesigner.exception.APIErrorException;
import com.liangmayong.apidesigner.interfaces.APIConstructor;
import com.liangmayong.apidesigner.listener.OnApiRequestListener;

import android.content.Context;

public class APICon implements APIConstructor {

    @Override
    public String getBaseUrl() {
        return "http://192.168.1.100/";
    }

    @Override
    public String parseData(APIResponse response) {
      //编写解析规则
        JSONObject json = (JSONObject) response.getResponse();
        try {
            return json.getString("data");
        } catch (Exception e) {
            return "";
        }
    }

    @Override
    public <T> T parseEntity(Class<T> entityClass, APIResponse response) {
      //在这里,你来决定使用gson还是fastjson,或者其他解析库
        return null;
    }

    @Override
    public <T> List<T> parseEntitys(Class<T> entityClass, APIResponse response) {
      //在这里,你来决定使用gson还是fastjson,或者其他解析库
        return null;
    }

    @Override
    public String parseMessage(APIResponse response) {
      //编写解析规则
        JSONObject json = (JSONObject) response.getResponse();
        try {
            return json.getString("message");
        } catch (Exception e) {
            return "";
        }
    }

    @Override
    public String parseCode(APIResponse response) {
        JSONObject json = (JSONObject) response.getResponse();
        try {
            return json.getString("code");
        } catch (Exception e) {
            return "";
        }
    }

    @Override
    public void destroy(Context context) {
        //这里写上停止请求的方法
    }

    @Override
    public void asynchronousRequest(Context context, APIMethod method, String url, APIParameter parameter,
            OnApiRequestListener listener) {
        //这里是异步请求具体实现,通过listener返回请求结果
        //在这里你来决定用Volley还是okhttp,或者其他的请求库
        //method 是请求方式,包括GET,POST,DELETE,PUT
    }

    @Override
    public APIResponse synchronizationRequest(Context context, APIMethod method, String url, APIParameter parameter)
            throws APIErrorException {
        //这里是同步请求具体实现,直接返回结果
        //在这里你来决定用Volley还是okhttp,或者其他的请求库
        //method 是请求方式,包括GET,POST,DELETE,PUT
        return null;
    }

}

第二步:定义接口(继承APIModule,可以根据不同的模块,定义对应的接口Module)

package com.liangmayong.api;

import java.lang.annotation.Retention;

import com.liangmayong.api.bean.UserInfo;
import com.liangmayong.apidesigner.APIModule;
import com.liangmayong.apidesigner.entity.APIParameter;
import com.liangmayong.apidesigner.entity.APIResponse;
import com.liangmayong.apidesigner.exception.APIErrorException;
import com.liangmayong.apidesigner.interfaces.APIConstructor.APIMethod;
import com.liangmayong.apidesigner.listener.OnApiEntityListener;

import android.content.Context;

public class UserAPI extends APIModule{

    //定义Call接口,Call接口是在调用时选择同步请求还是异步请求
    public Call login(String username,String password) {
        //使用相对接口地址,会自动与APICon中的getBaseUrl()返回值拼接
        String url = "/user/login.do";

        //使用相对接口地址,会自动与APICon中的getBaseUrl()返回值拼接
        //String url = "http://192.168.1.100/user/login.do";

        //封装请求参数
        APIParameter parameter = new APIParameter();
        parameter.put("username", username);
        parameter.put("password", password);
        return createCall(APIMethod.POST,url,parameter);
    }

    //定义异步接口,自动根据APICon定义的自动解析出对应的结果
    public void login(Context context,String username,String password,OnApiEntityListener<UserInfo> listener) {

        //使用相对接口地址,会自动与APICon中的getBaseUrl()返回值拼接
        String url = "/user/login.do";

        //使用相对接口地址,会自动与APICon中的getBaseUrl()返回值拼接
        //String url = "http://192.168.1.100/user/login.do";
        APIParameter parameter = new APIParameter();
        parameter.put("username", username);
        parameter.put("password", password);
        createCall(APIMethod.POST,url,parameter).asynchronousRequest(context, listener);
    }


    public APIResponse login(Context context, String username, String password) throws APIErrorException {

        // 使用相对接口地址,会自动与APICon中的getBaseUrl()返回值拼接
        String url = "/user/login.do";

        // 使用相对接口地址,会自动与APICon中的getBaseUrl()返回值拼接
        // String url = "http://192.168.1.100/user/login.do";
        APIParameter parameter = new APIParameter();
        parameter.put("username", username);
        parameter.put("password", password);
        return createCall(APIMethod.POST, url, parameter).synchronousRequest(context);
    }
}

第三步使用接口

package com.liangmayong.api;

import com.liangmayong.api.bean.UserInfo;
import com.liangmayong.apidesigner.APIDesigner;
import com.liangmayong.apidesigner.APIModule.Call;
import com.liangmayong.apidesigner.entity.APIResponse;
import com.liangmayong.apidesigner.exception.APIErrorException;
import com.liangmayong.apidesigner.listener.OnApiEntityListener;

import android.app.Activity;
import android.os.Bundle;

public class APIActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        // 创建接口模块
        UserAPI userAPI = APIDesigner.constructor(APICon.class).create(UserAPI.class);
        // 1,通过Call调用
        Call call = userAPI.login("user", "pass");
        //异步请求
        call.asynchronousRequest(this, new OnApiEntityListener<UserInfo>() {

            @Override
            public void result(String code, String message, UserInfo entity, APIResponse response) {
                // 请求成功
            }

            @Override
            public void failure(Throwable error) {
                // 请求失败
            }

            @Override
            public void loading() {
                // 开始请求

            }
        });
        //同步请求
        try {
            APIResponse response = call.synchronousRequest(this);
            //请求成功
            //获得解析器,解析结果Code
            response.getParser().getCode();
            //获得解析器,解析结果Message
            response.getParser().getMessage();
            //获得解析器,解析结果Message
            UserInfo info = response.getParser().getEntity(UserInfo.class);
        } catch (APIErrorException e) {
            //请求失败
        }

    }

}

原文链接:http://www.apkbus.com/blog-155821-60926.html

點擊查看更多內容
TA 點贊

若覺得本文不錯,就分享一下吧!

評論

作者其他優質文章

正在加載中
  • 推薦
  • 評論
  • 收藏
  • 共同學習,寫下你的評論
感謝您的支持,我會繼續努力的~
掃碼打賞,你說多少就多少
贊賞金額會直接到老師賬戶
支付方式
打開微信掃一掃,即可進行掃碼打賞哦
今天注冊有機會得

100積分直接送

付費專欄免費學

大額優惠券免費領

立即參與 放棄機會
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號

舉報

0/150
提交
取消