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) { //请求失败 } } }
點擊查看更多內容
為 TA 點贊
評論
評論
共同學習,寫下你的評論
評論加載中...
作者其他優質文章
正在加載中
感謝您的支持,我會繼續努力的~
掃碼打賞,你說多少就多少
贊賞金額會直接到老師賬戶
支付方式
打開微信掃一掃,即可進行掃碼打賞哦