AndroidSDK开发5不用第三库开发一个简单SDK

目录

AndroidSDK开发5不用第三库开发一个SDK

前言:

一.解决的问题如下:

1.不用引入任何的第三方库,所以不会额外增加apk大小.

2.不会出现导入重复的aar包或者依赖.

3.不会出现因引入不同的aar依赖版本导致项目出现兼容性或者冲突问题.

4.符合sdk开发尽量不依赖第三方和包尽量小的原则.

5.用户集成简单,调用方便.

6.不用担心第三方依赖库的版本升级问题.

7.不用处理第三库的混淆问题.

二、SDK具体实现如下:

1.网络请求结果回调接口如下:

2.网络请求结果类如下:

3.网络请求基类封装:

4.网络请求结果回调封装:

5.常量工具类封装:

6.application初始化:

7.SDK初始化管理:

三.SDK简单集成如下:

1.新建一个项目,在App的build.gradle引入libs配置:

2.引入自己开发的aar:

3.SDK初始化如下:

4.调用获取首页广告接口:

5.打印请求结果为:

6.由于前面几篇博客讲解sdk初始化、如何把项目或者module打包成aar、使用wanAndroidapi写一个SDK以及sdk开发的心得,这里就不详细展开讲解了,具体的内容参考以下之前的博客:

7.本文博客源码地址如下:

8.总结:

AndroidSDK开发5不用第三库开发一个SDK

前言:

前面一篇文章写了如何用okhttp+retrofit+rxjava等第三方库开发一个sdk,只能算一个简单的入门篇,就是把网络请求封装成接口,然后提供一个方法供别人调用,根据相应需求传入参数。但是这样很不好,如果aar不放远程仓库的话,用户还要导入相应的第三方依赖,无形之中会增加apk大小,而且如果客户用相同的库版本不一样,会出现重复导包和兼容性问题,这样也会增加用户集成难度,虽然可以解决,但是这样很麻烦,调用起来也不方便,为了解决以上问题,因此诞生了此篇文章,在不使用任何第三方库的情况下进行SDK开发.

一.解决的问题如下:

1.不用引入任何的第三方库,所以不会额外增加apk大小.

2.不会出现导入重复的aar包或者依赖.

3.不会出现因引入不同的aar依赖版本导致项目出现兼容性或者冲突问题.

4.符合sdk开发尽量不依赖第三方和包尽量小的原则.

5.用户集成简单,调用方便.

6.不用担心第三方依赖库的版本升级问题.

7.不用处理第三库的混淆问题.

二、SDK具体实现如下:

1.网络请求结果回调接口如下:

public interface WanHttpRequestCallBack {
    Boolean onResponse(String response);
​
    Boolean onFailed(String message);
}

2.网络请求结果类如下:

package com.example.wanandroidsdk.http;
​
/**
 * @author: njb
 * @date: 2021/3/23 17:32
 * @desc:
 */
public class WanAndroidHttpResult<T> {
    /**
     * 记录请求回来的错误状态描述
     */
    private Integer errorCode;
​
    /**
     * 记录请求回来的错误状态描述
     */
    private String errorMsg = "";
    /**
     * 记录返回的数据
     */
    private T data;
​
​
    /**
     * 业务是否成功
     */
    public boolean isBizSucceed(boolean defaultValue) {
        return null == errorCode ? defaultValue : errorCode == 0;
    }
​
​
    public T getData() {
        return data;
    }
​
    public void setData(T data) {
        this.data = data;
    }
​
    public Integer getErrorCode() {
        return errorCode;
    }
​
    public void setErrorCode(Integer errorCode) {
        this.errorCode = errorCode;
    }
​
    public String getErrorMsg() {
        return errorMsg;
    }
​
    public void setErrorMsg(String errorMsg) {
        this.errorMsg = errorMsg;
    }
}
​

3.网络请求基类封装:

package com.example.wanandroidsdk.http;
​
import android.util.MalformedJsonException;
​
import com.example.wanandroidsdk.utils.LogUtils;
import com.example.wanandroidsdk.utils.NetworkUtils;
​
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.SocketTimeoutException;
import java.net.URL;
import java.util.Map;
import java.util.Objects;
​
import static com.example.wanandroidsdk.constants.Constants.DEFAULT_TIMEOUT;
import static com.example.wanandroidsdk.constants.Constants.TAG;
​
public class WanHttpUtils {
    private static volatile WanHttpUtils mInstance;
​
    private WanHttpUtils() {
    }
​
    public static WanHttpUtils getInstance() {
        if (mInstance == null) {
            synchronized (WanHttpUtils.class) {
                if (mInstance == null) {
                    mInstance = new WanHttpUtils();
                }
            }
        }
        return mInstance;
    }
​
    public interface OnResponseListener {
        void onResponse(WanAndroidHttpResult httpResult);
    }
​
    public static class RequestThread extends Thread {
        private final Map<String, String> params;
        private final WanHttpUtils.OnResponseListener listener;
        private final byte[] lock = new byte[0];
        private boolean isCancel = false;
​
        public RequestThread(Map<String, String> params, WanHttpUtils.OnResponseListener listener) {
            this.params = params;
            this.listener = listener;
        }
​
        public void run() {
​
            WanAndroidHttpResult<String> result = Objects.equals(params.get("Method"), "POST") ? WanHttpUtils.doRequest(this.params) : WanHttpUtils.doRequestGet(this.params);
            synchronized (this.lock) {
                if (!this.isCancel) {
                    this.listener.onResponse(result);
                }
​
            }
​
        }
​
        public void cancel() {
            synchronized (this.lock) {
                this.isCancel = true;
            }
        }
    }
​
    public static WanAndroidHttpResult<String> doRequest(Map<String, String> params) {
        if (params == null) {
            return null;
        } else {
            WanAndroidHttpResult<String> result = new WanAndroidHttpResult<>();
            try {
                URL url = new URL(params.get("url"));
                LogUtils.d(TAG, url.toString());
                LogUtils.d(TAG,params.toString() + " --params-- ");
                HttpURLConnection connection = (HttpURLConnection) url.openConnection();
                connection.setRequestMethod(params.get("Method"));
                connection.setReadTimeout(DEFAULT_TIMEOUT);
                connection.setConnectTimeout(DEFAULT_TIMEOUT);
                connection.setDoOutput(true);
                connection.setDoInput(true);
                connection.setRequestProperty("Connection", "Keep-Alive");
                connection.setRequestProperty("Charset", "UTF-8");
                connection.setRequestProperty("Content-Type", "application/json; charset=UTF-8");
                connection.setRequestProperty("accept", "application/json");
                String requestParamJsonObject = params.get("body");
                if (requestParamJsonObject != null && !"".equals(requestParamJsonObject.trim())) {
                    byte[] bytes = requestParamJsonObject.getBytes();
                    connection.setRequestProperty("Content-Length", String.valueOf(bytes.length));
                    OutputStream outputStream = connection.getOutputStream();
                    outputStream.write(bytes);
                    outputStream.flush();
                    outputStream.close();
                }
​
                int responseCode = connection.getResponseCode();
                if (200 == responseCode) {
                    result.isBizSucceed(true);
                    result.setData(getResponseDataString(connection.getInputStream()));
​
                } else {
                    result.isBizSucceed(false);
                    result.setErrorMsg("errorCode:" + responseCode + connection.getResponseMessage());
                }
            } catch (Exception e) {
                String msg;
                if (!NetworkUtils.isConnected()) {
                    msg = "请检查网络";
                } else if (e instanceof SocketTimeoutException) {
                    msg = "网络请求超时,请稍后重试";
                } else if (e instanceof MalformedJsonException) {
                    msg = "数据解析失败";
                } else {
                    msg = "请求失败,请稍后重试:" + e.getMessage();
                }
                result.setErrorMsg(msg);
            }
​
            return result;
        }
    }
​
    public static WanAndroidHttpResult<String> doRequestGet(Map<String, String> params) {
        if (params == null) {
            return null;
        } else {
            WanAndroidHttpResult<String> result = new WanAndroidHttpResult<>();
            try {
                URL url = new URL(params.get("url"));
                LogUtils.d(TAG, url.toString());
                LogUtils.d(TAG,params.toString() + " --params-- ");
                HttpURLConnection connection = (HttpURLConnection) url.openConnection();
                connection.setRequestMethod("GET");
                connection.setReadTimeout(DEFAULT_TIMEOUT);
                connection.setConnectTimeout(DEFAULT_TIMEOUT);
//                connection.setRequestProperty("Connection", "Keep-Alive");
//                connection.setRequestProperty("Charset", "UTF-8");
//                connection.setRequestProperty("Content-Type", "application/json; charset=UTF-8");
//                connection.setRequestProperty("accept", "application/json");
                int responseCode = connection.getResponseCode();
                if (200 == responseCode) {
                    result.isBizSucceed(true);
                    result.setData(getResponseDataString(connection.getInputStream()));
                } else {
                    result.isBizSucceed(false);
                    result.setErrorMsg("errorCode:" + responseCode + connection.getResponseMessage());
                }
            } catch (Exception e) {
                String msg = "";
                if (!NetworkUtils.isConnected()) {
                    msg = "网络连接失败,请检查网络";
                } else if (e instanceof SocketTimeoutException) {
                    msg = "网络请求超时,请稍后重试";
                } else if (e instanceof MalformedJsonException) {
                    msg = "数据解析失败";
                } else {
                    msg = "请求失败,请稍后重试:" + e.getMessage();
                }
                result.setErrorMsg(msg);
            }
            return result;
        }
    }
​
    private static String getResponseDataString(InputStream inputStream) {
        InputStreamReader inputStreamReader = new InputStreamReader(inputStream);
        BufferedReader bufferedReader = new BufferedReader(inputStreamReader);
        StringBuilder stringBuilder = new StringBuilder();
        String temp = null;
​
        try {
            while ((temp = bufferedReader.readLine()) != null) {
                stringBuilder.append(temp);
            }
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                bufferedReader.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
            bufferedReader = null;
            try {
                inputStreamReader.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
            inputStreamReader = null;
            try {
                inputStream.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        return stringBuilder.toString();
    }
}
​

4.网络请求结果回调封装:

package com.example.wanandroidsdk.http;
​
import android.widget.PopupWindow;
import android.widget.Toast;
​
import com.example.wanandroidsdk.app.MyApp;
import com.example.wanandroidsdk.constants.Constants;
import com.example.wanandroidsdk.utils.LogUtils;
​
import org.json.JSONException;
import org.json.JSONObject;
​
import java.util.HashMap;
import java.util.Map;
​
public class WanHttpRequest {
    private static final String TAG = "WanHttp";
    public static void getBanner(final  WanHttpRequestCallBack callBack) {
        getHomeBanner(new WanHttpUtils.OnResponseListener() {
            @Override
            public void onResponse(WanAndroidHttpResult httpResult) {
                if (httpResult == null && httpResult.getData() == null) {
                    return;
                }
                try {
                    String content = httpResult.getData().toString();
                    if(content != null) {
                        if (httpResult.isBizSucceed(true)) {
                            callBack.onResponse(content);
                        } else {
                            String message = httpResult.getErrorMsg();
                            callBack.onFailed(message);
                        }
                        LogUtils.e(TAG, content);
                    }
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
    }
​
    public static void getHotKey(final WanHttpRequestCallBack callBack){
        getHotKey(new WanHttpUtils.OnResponseListener() {
            @Override
            public void onResponse(WanAndroidHttpResult httpResult) {
                if (httpResult == null) {
                    return;
                }
                try {
                    String content = httpResult.getData().toString();
                    if (httpResult.isBizSucceed(true)) {
                        callBack.onResponse(content);
                    } else {
                        String message = httpResult.getErrorMsg();
                        callBack.onFailed(message);
                    }
                    LogUtils.e(TAG, content);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
    }
​
    public static void getArticleList(final WanHttpRequestCallBack callBack){
      getArticle(new WanHttpUtils.OnResponseListener() {
          @Override
          public void onResponse(WanAndroidHttpResult httpResult) {
              if (httpResult == null) {
                  return;
              }
              try {
                  String content = httpResult.getData().toString();
                  if (httpResult.isBizSucceed(true)) {
                      callBack.onResponse(content);
                  } else {
                      String message = httpResult.getErrorMsg();
                      callBack.onFailed(message);
                  }
                  LogUtils.e(TAG, content);
              } catch (Exception e) {
                  e.printStackTrace();
              }
          }
      },1);
    }
​
    public static void getTreeList(final WanHttpRequestCallBack callBack){
        getTree(httpResult -> {
            if (httpResult == null) {
                return;
            }
            try {
                String content = httpResult.getData().toString();
                if (httpResult.isBizSucceed(true)) {
                    callBack.onResponse(content);
                } else {
                    String message = httpResult.getErrorMsg();
                    callBack.onFailed(message);
                }
                LogUtils.e(TAG, content);
            } catch (Exception e) {
                e.printStackTrace();
            }
        });
    }
​
    public static void getFriendList(final WanHttpRequestCallBack callBack){
        getFriend(new WanHttpUtils.OnResponseListener() {
            @Override
            public void onResponse(WanAndroidHttpResult httpResult) {
                if (httpResult == null) {
                    return;
                }
                try {
                    String content = httpResult.getData().toString();
                    if (httpResult.isBizSucceed(true)) {
                        callBack.onResponse(content);
                    } else {
                        String message = httpResult.getErrorMsg();
                        callBack.onFailed(message);
                    }
                    LogUtils.e(TAG, content);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
    }
​
    public static void getNaviList(final WanHttpRequestCallBack callBack){
        getNav(new WanHttpUtils.OnResponseListener() {
            @Override
            public void onResponse(WanAndroidHttpResult httpResult) {
                if (httpResult == null) {
                    return;
                }
                try {
                    String content = httpResult.getData().toString();
                    if (httpResult.isBizSucceed(true)) {
                        callBack.onResponse(content);
                    } else {
                        String message = httpResult.getErrorMsg();
                        callBack.onFailed(message);
                    }
                    LogUtils.e(TAG, content);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
    }
​
    public static void getWxArticle(final WanHttpRequestCallBack callBack){
        WxArticle(new WanHttpUtils.OnResponseListener() {
            @Override
            public void onResponse(WanAndroidHttpResult httpResult) {
                if (httpResult == null) {
                    return;
                }
                try {
                    String content = httpResult.getData().toString();
                    if (httpResult.isBizSucceed(true)) {
                        callBack.onResponse(content);
                    } else {
                        String message = httpResult.getErrorMsg();
                        callBack.onFailed(message);
                    }
                    LogUtils.e(TAG, content);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
    }
​
    public static void getProject(final WanHttpRequestCallBack callBack){
        project(new WanHttpUtils.OnResponseListener() {
            @Override
            public void onResponse(WanAndroidHttpResult httpResult) {
                if (httpResult == null) {
                    return;
                }
                try {
                    String content = httpResult.getData().toString();
                    if (httpResult.isBizSucceed(true)) {
                        callBack.onResponse(content);
                    } else {
                        String message = httpResult.getErrorMsg();
                        callBack.onFailed(message);
                    }
                    LogUtils.e(TAG, content);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
    }
​
    public static void getQuerySearch(final WanHttpRequestCallBack callBack,int page,String keyWord){
        querySearch(new WanHttpUtils.OnResponseListener() {
            @Override
            public void onResponse(WanAndroidHttpResult httpResult) {
                if (httpResult == null) {
                    return;
                }
                try {
                    String content = httpResult.getData().toString();
                    if (httpResult.isBizSucceed(true)) {
                        callBack.onResponse(content);
                    } else {
                        String message = httpResult.getErrorMsg();
                        callBack.onFailed(message);
                    }
                    LogUtils.e(TAG, content);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        },page,keyWord);
    }
​
    public static void getQueryArticle(final WanHttpRequestCallBack callBack,int page,int cid){
        queryArticle(new WanHttpUtils.OnResponseListener() {
            @Override
            public void onResponse(WanAndroidHttpResult httpResult) {
                if (httpResult == null) {
                    return;
                }
                try {
                    String content = httpResult.getData().toString();
                    if (httpResult.isBizSucceed(true)) {
                        callBack.onResponse(content);
                    } else {
                        String message = httpResult.getErrorMsg();
                        callBack.onFailed(message);
                        Toast.makeText(MyApp.getInstance(),message,Toast.LENGTH_SHORT).show();
                    }
                    LogUtils.e(TAG, content);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        },page,cid);
    }
​
    public static void getProjectList(final  WanHttpRequestCallBack callBack,int page ,int cid){
        projectList(new WanHttpUtils.OnResponseListener() {
            @Override
            public void onResponse(WanAndroidHttpResult httpResult) {
                if (httpResult == null) {
                    return;
                }
                try {
                    String content = httpResult.getData().toString();
                    if (httpResult.isBizSucceed(true)) {
                        callBack.onResponse(content);
                    } else {
                        String message = httpResult.getErrorMsg();
                        callBack.onFailed(message);
                    }
                    LogUtils.e(TAG, content);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        },page,cid);
    }
​
    public static void getArticleTop(final WanHttpRequestCallBack callBack){
        articleTop(new WanHttpUtils.OnResponseListener() {
            @Override
            public void onResponse(WanAndroidHttpResult httpResult) {
                if (httpResult == null) {
                    return;
                }
                try {
                    String content = httpResult.getData().toString();
                    if (httpResult.isBizSucceed(true)) {
                        callBack.onResponse(content);
                    } else {
                        String message = httpResult.getErrorMsg();
                        callBack.onFailed(message);
                    }
                    LogUtils.e(TAG, content);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
    }
​
    public static void getSearchAuthor(final WanHttpRequestCallBack callBack,String author){
        searchAuthor(new WanHttpUtils.OnResponseListener() {
            @Override
            public void onResponse(WanAndroidHttpResult httpResult) {
                if (httpResult == null) {
                    return;
                }
                try {
                    String content = httpResult.getData().toString();
                    if (httpResult.isBizSucceed(true)) {
                        callBack.onResponse(content);
                    } else {
                        String message = httpResult.getErrorMsg();
                        callBack.onFailed(message);
                    }
                    LogUtils.e(TAG, content);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        },author);
    }
​
    public static void getUserArticle(final WanHttpRequestCallBack callBack,int page){
        userArticle(new WanHttpUtils.OnResponseListener() {
            @Override
            public void onResponse(WanAndroidHttpResult httpResult) {
                if (httpResult == null) {
                    return;
                }
                try {
                    String content = httpResult.getData().toString();
                    if (httpResult.isBizSucceed(true)) {
                        callBack.onResponse(content);
                    } else {
                        String message = httpResult.getErrorMsg();
                        callBack.onFailed(message);
                    }
                    LogUtils.e(TAG, content);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        },page);
    }
​
    public static void getUserShare(final WanHttpRequestCallBack callBack,int page){
        userShareArticle(new WanHttpUtils.OnResponseListener() {
            @Override
            public void onResponse(WanAndroidHttpResult httpResult) {
                if (httpResult == null) {
                    return;
                }
                try {
                    String content = httpResult.getData().toString();
                    if (httpResult.isBizSucceed(true)) {
                        callBack.onResponse(content);
                    } else {
                        String message = httpResult.getErrorMsg();
                        callBack.onFailed(message);
                    }
                    LogUtils.e(TAG, content);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        },page);
    }
​
    public static void getComments(final  WanHttpRequestCallBack callBack,int questionId){
        questionComment(new WanHttpUtils.OnResponseListener() {
            @Override
            public void onResponse(WanAndroidHttpResult httpResult) {
                if (httpResult == null) {
                    return;
                }
                try {
                    String content = httpResult.getData().toString();
                    if (httpResult.isBizSucceed(true)) {
                        callBack.onResponse(content);
                    } else {
                        String message = httpResult.getErrorMsg();
                        callBack.onFailed(message);
                    }
                    LogUtils.e(TAG, content);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        },questionId);
    }
​
    public static void getListProject(final WanHttpRequestCallBack callBack){
        listProject(new WanHttpUtils.OnResponseListener() {
            @Override
            public void onResponse(WanAndroidHttpResult httpResult) {
                if (httpResult == null) {
                    return;
                }
                try {
                    String content = httpResult.getData().toString();
                    if (httpResult.isBizSucceed(true)) {
                        callBack.onResponse(content);
                    } else {
                        String message = httpResult.getErrorMsg();
                        callBack.onFailed(message);
                    }
                    LogUtils.e(TAG, content);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
    }
​
    public static void getWxArticleList(WanHttpRequestCallBack callBack){
        wxArticleList(new WanHttpUtils.OnResponseListener() {
            @Override
            public void onResponse(WanAndroidHttpResult httpResult) {
                if (httpResult == null) {
                    return;
                }
                try {
                    String content = httpResult.getData().toString();
                    if (httpResult.isBizSucceed(true)) {
                        callBack.onResponse(content);
                    } else {
                        String message = httpResult.getErrorMsg();
                        callBack.onFailed(message);
                    }
                    LogUtils.e(TAG, content);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
    }
​
    public static void getWendaList(WanHttpRequestCallBack callBack){
        wendaList(new WanHttpUtils.OnResponseListener() {
            @Override
            public void onResponse(WanAndroidHttpResult httpResult) {
                if (httpResult == null) {
                    return;
                }
                try {
                    String content = httpResult.getData().toString();
                    if (httpResult.isBizSucceed(true)) {
                        callBack.onResponse(content);
                    } else {
                        String message = httpResult.getErrorMsg();
                        callBack.onFailed(message);
                    }
                    LogUtils.e(TAG, content);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
    }
​
    public static void getUserRegister(WanHttpRequestCallBack callBack,String username,String password,String repassword) {
        userRegister(new WanHttpUtils.OnResponseListener() {
            @Override
            public void onResponse(WanAndroidHttpResult httpResult) {
                if (httpResult == null) {
                    return;
                }
                try {
                    if(httpResult.getData() != null) {
                        String content = httpResult.getData().toString();
                            if (httpResult.isBizSucceed(true)) {
                                callBack.onResponse(content);
                            } else {
                                String message = httpResult.getErrorMsg();
                                callBack.onFailed(message);
                            }
                            LogUtils.e(TAG, content);
                    }
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        },username,password,repassword);
    }
​
    public static void getUserLogin(WanHttpRequestCallBack callBack,String username,String password){
        userLogin(new WanHttpUtils.OnResponseListener() {
            @Override
            public void onResponse(WanAndroidHttpResult httpResult) {
                if (httpResult == null) {
                    return;
                }
                try {
                    if(httpResult.getData() != null) {
                        String content = httpResult.getData().toString();
                        if (httpResult.isBizSucceed(true)) {
                            callBack.onResponse(content);
                        } else {
                            String message = httpResult.getErrorMsg();
                            callBack.onFailed(message);
                        }
                        LogUtils.e(TAG, content);
                    }
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        },username,password);
    }
​
    public static void userLogout(WanHttpRequestCallBack callBack){
        userLogout(new WanHttpUtils.OnResponseListener() {
            @Override
            public void onResponse(WanAndroidHttpResult httpResult) {
                if (httpResult == null) {
                    return;
                }
                try {
                    if(httpResult.getData() != null) {
                        String content = httpResult.getData().toString();
                        if (httpResult.isBizSucceed(true)) {
                            callBack.onResponse(content);
                        } else {
                            String message = httpResult.getErrorMsg();
                            callBack.onFailed(message);
                        }
                        LogUtils.e(TAG, content);
                    }
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
    }
​
    /**
     * 获取首页banner接口
     *
     * @param responseListener
     * @return
     */
    private static WanHttpUtils.RequestThread getHomeBanner(WanHttpUtils.OnResponseListener responseListener) {
        if (responseListener == null) {
            return null;
        }
        Map<String, String> params = new HashMap<>();
        String url = Constants.BASE_URL + Constants.BANNER_LIST;
        params.put("url", url);
        params.put("Method", "GET");
        WanHttpUtils.RequestThread requestThread = new WanHttpUtils.RequestThread(params, responseListener);
        requestThread.start();
        return requestThread;
    }
​
    /**
     * 获取搜索热词接口
     * @param responseListener
     * @return
     */
    private static WanHttpUtils.RequestThread getHotKey(WanHttpUtils.OnResponseListener responseListener){
        if (responseListener == null) {
            return null;
        }
        Map<String, String> params = new HashMap<>();
        String url = Constants.BASE_URL + Constants.HOT_KEY;
        params.put("url", url);
        params.put("Method", "GET");
        WanHttpUtils.RequestThread requestThread = new WanHttpUtils.RequestThread(params, responseListener);
        requestThread.start();
        return requestThread;
    }
​
    private static WanHttpUtils.RequestThread getArticle(WanHttpUtils.OnResponseListener responseListener,int page){
        if (responseListener == null){
            return null;
        }
        JSONObject jsonObject = new JSONObject();
 /*       try {
            jsonObject.put("page", page);
        } catch (JSONException e) {
            e.printStackTrace();
        }*/
        Map<String, String> params = new HashMap<>();
        String url = Constants.BASE_URL + Constants.ARTICLE_LIST;
        params.put("url", url);
        params.put("Method", "GET");
        WanHttpUtils.RequestThread requestThread = new WanHttpUtils.RequestThread(params, responseListener);
        requestThread.start();
        return requestThread;
    }
​
    private static WanHttpUtils.RequestThread getTree(WanHttpUtils.OnResponseListener responseListener){
        if (responseListener == null){
            return null;
        }
        Map<String, String> params = new HashMap<>();
        String url = Constants.BASE_URL + Constants.TREE;
        params.put("url", url);
        params.put("Method", "GET");
        WanHttpUtils.RequestThread requestThread = new WanHttpUtils.RequestThread(params, responseListener);
        requestThread.start();
        return requestThread;
    }
​
    private static WanHttpUtils.RequestThread getFriend(WanHttpUtils.OnResponseListener responseListener){
        if (responseListener == null){
            return null;
        }
        JSONObject jsonObject = new JSONObject();
 /*       try {
            jsonObject.put("page", page);
        } catch (JSONException e) {
            e.printStackTrace();
        }*/
        Map<String, String> params = new HashMap<>();
        String url = Constants.BASE_URL + Constants.FRIEND;
        params.put("url", url);
        params.put("Method", "GET");
        WanHttpUtils.RequestThread requestThread = new WanHttpUtils.RequestThread(params, responseListener);
        requestThread.start();
        return requestThread;
    }
​
    private static WanHttpUtils.RequestThread getNav(WanHttpUtils.OnResponseListener responseListener){
        if(responseListener == null){
            return null;
        }
        Map<String,String> params = new HashMap<>();
        String url = Constants.BASE_URL + Constants.NAVI;
        params.put("url",url);
        params.put("Method","GET");
        WanHttpUtils.RequestThread requestThread = new WanHttpUtils.RequestThread(params, responseListener);
        requestThread.start();
        return requestThread;
    }
​
    private static WanHttpUtils.RequestThread WxArticle(WanHttpUtils.OnResponseListener responseListener){
        if(responseListener == null){
            return  null;
        }
        Map<String,String> params = new HashMap<>();
        String url =Constants.BASE_URL + Constants.WXARTICLE;
        params.put("url",url);
        params.put("Method","GET");
        WanHttpUtils.RequestThread requestThread = new WanHttpUtils.RequestThread(params, responseListener);
        requestThread.start();
        return requestThread;
    }
​
    private static WanHttpUtils.RequestThread project(WanHttpUtils.OnResponseListener responseListener){
        if(responseListener == null){
            return  null;
        }
    /*    JSONObject jsonObject = new JSONObject();
        try {
            jsonObject.put("page", page);
        } catch (JSONException e) {
            e.printStackTrace();
        }*/
        Map<String,String> params = new HashMap<>();
        String url =Constants.BASE_URL +Constants.PROJECT_TREE;
        params.put("url",url);
        params.put("Method","GET");
        WanHttpUtils.RequestThread requestThread = new WanHttpUtils.RequestThread(params, responseListener);
        requestThread.start();
        return requestThread;
    }
​
    private static WanHttpUtils.RequestThread querySearch(WanHttpUtils.OnResponseListener responseListener,int page,String keyword){
        if(responseListener == null){
            return  null;
        }
        Map<String,String> stringMap = new HashMap<>();
        String url =Constants.BASE_URL + Constants.QUERY_ARTICLE  + page + Constants.QUERY_ARTICLE_END + "?k=" + keyword;
        stringMap.put("url",url);
        stringMap.put("Method","POST");
        stringMap.put("body","}");
        WanHttpUtils.RequestThread requestThread = new WanHttpUtils.RequestThread(stringMap, responseListener);
        requestThread.start();
        return requestThread;
    }
​
    private static WanHttpUtils.RequestThread queryArticle(WanHttpUtils.OnResponseListener responseListener,int page,int cid){
        if(responseListener == null){
            return null;
        }
        JSONObject jsonObject = new JSONObject();
        try {
            jsonObject.put("page",page);
            jsonObject.put("cid",cid);
        } catch (JSONException e) {
            e.printStackTrace();
        }
        Map<String,String> stringMap = new HashMap<>();
        String url =Constants.BASE_URL + Constants.ARTICLE_URL_START + page + Constants.ARTICLE_URL_END + "?cid=" + cid ;
        stringMap.put("url",url);
        stringMap.put("Method","GET");
        WanHttpUtils.RequestThread requestThread = new WanHttpUtils.RequestThread(stringMap, responseListener);
        requestThread.start();
        return requestThread;
    }
​
    private static WanHttpUtils.RequestThread projectList(WanHttpUtils.OnResponseListener responseListener,int page,int cid){
        if(responseListener == null){
            return null;
        }
        JSONObject jsonObject = new JSONObject();
        try {
            jsonObject.put("page",page);
            jsonObject.put("cid",cid);
        } catch (JSONException e) {
            e.printStackTrace();
        }
        Map<String,String> stringMap = new HashMap<>();
        String url =Constants.BASE_URL + Constants.PROJECT_LIST_START + page + Constants.PROJECT_LIST_END + "?cid=" + cid ;
        stringMap.put("url",url);
        stringMap.put("Method","GET");
        WanHttpUtils.RequestThread requestThread = new WanHttpUtils.RequestThread(stringMap, responseListener);
        requestThread.start();
        return requestThread;
    }
​
    private static WanHttpUtils.RequestThread articleTop(WanHttpUtils.OnResponseListener responseListener){
        if(responseListener == null){
            return null;
        }
        Map<String,String> stringMap = new HashMap<>();
        String url =Constants.BASE_URL + Constants.ARTICLE_TOP;
        stringMap.put("url",url);
        stringMap.put("Method","GET");
        WanHttpUtils.RequestThread requestThread = new WanHttpUtils.RequestThread(stringMap, responseListener);
        requestThread.start();
        return requestThread;
    }
​
    private static WanHttpUtils.RequestThread searchAuthor(WanHttpUtils.OnResponseListener responseListener,String author){
        if(responseListener == null){
            return  null;
        }
 /*       JSONObject jsonObject = new JSONObject();
        try {
            jsonObject.put("author",author);
        } catch (JSONException e) {
            e.printStackTrace();
        }*/
        Map<String,String> stringMap = new HashMap<>();
        String url =Constants.BASE_URL + Constants.SEARCH_AUTHOR + "?author=" +author ;
        stringMap.put("url",url);
        stringMap.put("Method","GET");
        WanHttpUtils.RequestThread requestThread = new WanHttpUtils.RequestThread(stringMap, responseListener);
        requestThread.start();
        return requestThread;
    }
​
    private static WanHttpUtils.RequestThread userArticle(WanHttpUtils.OnResponseListener responseListener,int page){
        Map<String,String> stringMap = new HashMap<>();
        String url = Constants.BASE_URL + Constants.USER_ARTICLE_START + page + Constants.USER_ARTICLE_END ;
        stringMap.put("url",url);
        stringMap.put("Method","GET");
        WanHttpUtils.RequestThread requestThread = new WanHttpUtils.RequestThread(stringMap, responseListener);
        requestThread.start();
        return requestThread;
    }
​
    private static WanHttpUtils.RequestThread userShareArticle(WanHttpUtils.OnResponseListener responseListener,int page){
        if(responseListener == null){
            return  null;
        }
        Map<String,String> params = new HashMap<>();
        String url = Constants.BASE_URL + Constants.USER_SHARE_ARTICLE_START + page + Constants.USER_SHARE_ARTICLE_END;
        params.put("url",url);
        params.put("Method","GET");
        WanHttpUtils.RequestThread requestThread = new WanHttpUtils.RequestThread(params,responseListener);
        requestThread.start();
        return requestThread;
    }
​
    private static WanHttpUtils.RequestThread questionComment(WanHttpUtils.OnResponseListener responseListener,int questionId){
        if(responseListener == null){
            return  null;
        }
        Map<String,String> stringMap = new HashMap<>();
        String url = Constants.BASE_URL + Constants.WENDA_COMMENTS_START + questionId + Constants.WENDA_COMMENTS_END;
        stringMap.put("url",url);
        stringMap.put("Method","GET");
        WanHttpUtils.RequestThread requestThread = new WanHttpUtils.RequestThread(stringMap,responseListener);
        requestThread.start();
        return requestThread;
    }
​
    private static WanHttpUtils.RequestThread listProject(WanHttpUtils.OnResponseListener responseListener){
        if(responseListener == null){
            return null;
        }
        Map<String,String> stringMap = new HashMap<>();
        String url = Constants.BASE_URL + Constants.LIST_PROJECT;
        stringMap.put("url",url);
        stringMap.put("Method","GET");
        WanHttpUtils.RequestThread requestThread = new WanHttpUtils.RequestThread(stringMap,responseListener);
        requestThread.start();
        return requestThread;
    }
​
    private static WanHttpUtils.RequestThread wxArticleList(WanHttpUtils.OnResponseListener responseListener){
        if(responseListener == null){
            return null;
        }
        Map<String,String> stringMap = new HashMap<>();
        String url = Constants.BASE_URL + Constants.WXARTICLE_LIST;
        stringMap.put("url",url);
        stringMap.put("Method","GET");
        WanHttpUtils.RequestThread requestThread = new WanHttpUtils.RequestThread(stringMap,responseListener);
        requestThread.start();
        return requestThread;
    }
​
    private static WanHttpUtils.RequestThread wendaList(WanHttpUtils.OnResponseListener responseListener){
        if(responseListener == null){
            return null;
        }
        Map<String,String> stringMap = new HashMap<>();
        String url = Constants.BASE_URL + Constants.WENDA_LIST;
        stringMap.put("url",url);
        stringMap.put("Method","GET");
        WanHttpUtils.RequestThread requestThread = new WanHttpUtils.RequestThread(stringMap,responseListener);
        requestThread.start();
        return requestThread;
    }
​
    private static WanHttpUtils.RequestThread userRegister(WanHttpUtils.OnResponseListener  responseListener,String username,String password,String repassword){
        if(responseListener == null){
            return null;
        }
        JSONObject jsonObject = new JSONObject();
        try {
            jsonObject.put("username",username);
            jsonObject.put("password",password);
            jsonObject.put("repassword",repassword);
        } catch (JSONException e) {
            e.printStackTrace();
        }
        Map<String,String> stringMap = new HashMap<>();
        String url =Constants.BASE_URL + Constants.USER_REGISTER +"?username=" + username + "&password=" + password + "&repassword="+ repassword;
        stringMap.put("url",url);
        stringMap.put("Method","POST");
        stringMap.put("body","}");
        WanHttpUtils.RequestThread requestThread = new WanHttpUtils.RequestThread(stringMap,responseListener);
        requestThread.start();
        return requestThread;
    }
​
    private static WanHttpUtils.RequestThread userLogin(WanHttpUtils.OnResponseListener responseListener,String username,String password){
        if(responseListener == null){
            return null;
        }
        Map<String,String> stringMap = new HashMap<>();
        String url =Constants.BASE_URL + Constants.USER_LOGIN +"?username=" + username + "&password=" + password;
        stringMap.put("url",url);
        stringMap.put("Method","POST");
        stringMap.put("body","}");
        WanHttpUtils.RequestThread requestThread = new WanHttpUtils.RequestThread(stringMap,responseListener);
        requestThread.start();
        return requestThread;
    }
​
    private static WanHttpUtils.RequestThread userLogout(WanHttpUtils.OnResponseListener responseListener){
        if(responseListener == null){
            return null;
        }
        Map<String,String> stringMap = new HashMap<>();
        String url =Constants.BASE_URL + Constants.USER_LOGOUT;
        stringMap.put("url",url);
        stringMap.put("Method","GET");
        WanHttpUtils.RequestThread requestThread = new WanHttpUtils.RequestThread(stringMap,responseListener);
        requestThread.start();
        return requestThread;
    }
}
​

5.常量工具类封装:

package com.example.wanandroidsdk.constants;
​
public class Constants {
    public static final String BASE_URL = "https://www.wanandroid.com";
    public static final int DEFAULT_TIMEOUT = 20000;//10秒
    public static final String TAG = "WanHttp";
​
    //获取首页banner列表
    public static final String BANNER_LIST = "/banner/json";
​
    //文章列表
    public static final String ARTICLE_LIST = "/article/list/1/json";
​
    //搜索热词
    public static final String HOT_KEY = "/hotkey/json";
​
    //体系数据
    public static final String TREE = "/tree/json";
​
    //常用网站
    public static final String FRIEND = "/friend/json";
​
    //导航
    public static final String NAVI = "/navi/json";
​
    //公众号列表
    public static final String WXARTICLE = "/wxarticle/chapters/json";
​
    //查看某个公众号历史数据
    public static final String WXARTICLE_LIST = "/wxarticle/list/408/1/json";
​
    //项目分类
    public static final String PROJECT_TREE = "/project/tree/json";
​
    //项目列表数据
    public static final String PROJECT_LIST_START = "/project/list/";
​
    public static final String PROJECT_LIST_END = "/json/";
​
    //搜索
    public static final String QUERY_ARTICLE = "/article/query/";
​
    public static final String QUERY_ARTICLE_END = "/json";
​
    //知识体系下的文章
    public static final String ARTICLE_URL_START = "/article/list/";
​
    public static final String ARTICLE_URL_END = "/json";
​
    //置顶文章
    public static final String ARTICLE_TOP = "/article/top/json";
​
    //按照作者昵称搜索文章
    public static final String SEARCH_AUTHOR = "/article/list/0/json";
​
    //广场列表
    public static final String USER_ARTICLE_START = "/user_article/list/";
​
    public static final String USER_ARTICLE_END = "/json";
​
    //分享人对应列表数据
    public static final String USER_SHARE_ARTICLE_START = "/user/2/share_articles/";
​
    public static final String USER_SHARE_ARTICLE_END = "/json";
​
    //问答评论列表
    public static final String WENDA_COMMENTS_START ="/wenda/comments/";
​
    public static final String WENDA_COMMENTS_END ="/json";
​
    //最新tab
    public static final String LIST_PROJECT = "/article/listproject/0/json";
​
    public static final String WENDA_LIST = "/wenda/list/1/json";
​
    //用户注册
    public static final String USER_REGISTER = "/user/register";
​
    //用户登录
    public static final String USER_LOGIN = "/user/login";
​
    //用户退出
    public static final String USER_LOGOUT = "/user/logout/json";
}

6.application初始化:

public class MyApp extends Application {
    private static Application mInstance;
​
    @Override
    public void onCreate() {
        super.onCreate();
        mInstance = this;
    }
​
    public static void setApp(Application app){
        mInstance = app;
    }
​
    public static Application getInstance() {
        return mInstance;
    }
}

7.SDK初始化管理:

public class WanAndroidManager {
    private static Context mContent;
​
    public static void init(Application application) {
        mContent = application.getApplicationContext();
    }
}

三.SDK简单集成如下:

1.新建一个项目,在App的build.gradle引入libs配置:

repositories {
    //libs 目录
    flatDir {
        dirs "libs"
    }
}

2.引入自己开发的aar:

dependencies {
    implementation 'androidx.appcompat:appcompat:1.1.0'
    implementation 'com.google.android.material:material:1.1.0'
    implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
    testImplementation 'junit:junit:4.+'
    androidTestImplementation 'androidx.test.ext:junit:1.1.1'
    androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0'
    implementation(name: 'wan', ext: 'aar')
}

3.SDK初始化如下:

public class App extends Application {
    @Override
    public void onCreate() {
        super.onCreate();
        MyApp.setApp(this);
    }
}

4.调用获取首页广告接口:

       private void getBannerData() {
        WanHttpRequest.getBanner(new WanHttpRequestCallBack() {
            @Override
            public Boolean onResponse(String bannerBeans) {
                try {
                    JSONObject jsonObject = new JSONObject(bannerBeans);
                    List<BannerBean> list = new ArrayList<>();
                    JSONArray array = jsonObject.getJSONArray("data");
                    if (array != null && array.length() > 0) {
                        for (int i = 0; i < array.length(); i++) {
                            BannerBean bannerBean = new BannerBean();
                            JSONObject object = array.getJSONObject(i);
                            bannerBean.setId(object.getInt("id"));
                            bannerBean.setUrl(object.getString("url"));
                            bannerBean.setDesc(object.getString("desc"));
                            bannerBean.setImagePath(object.getString("imagePath"));
                            bannerBean.setIsVisible(object.getInt("isVisible"));
                            bannerBean.setOrder(object.getInt("order"));
                            bannerBean.setTitle(object.getString("title"));
                            bannerBean.setType(object.getInt("type"));
                            list.add(bannerBean);
                        }
                        Log.d(Constants.TAG, list.get(0).getTitle());
                    }
                } catch (JSONException e) {
                    e.printStackTrace();
                }
                return null;
            }
​
            @Override
            public Boolean onFailed(String message) {
                Log.d(Constants.TAG, message);
                return null;
            }
        } );
    }

5.打印请求结果为:

6.由于前面几篇博客讲解sdk初始化、如何把项目或者module打包成aar、使用wanAndroidapi写一个SDK以及sdk开发的心得,这里就不详细展开讲解了,具体的内容参考以下之前的博客:

Android SDK开发1将完整项目或Module打包成aar

Android SDK开发1将完整项目或Module打包成aar_淡淡的香烟的博客-CSDN博客_aar

AndroidSDK开发2SDK初始化问题

AndroidSDK开发2SDK初始化问题_淡淡的香烟的博客-CSDN博客_如何初始化sdk

Androidsdk开发3之用WanAndroidApi写一个sdk

Androidsdk开发3之用WanAndroidApi写一个sdk_淡淡的香烟的博客-CSDN博客

Android SDK开发4之心得体会

Android SDK开发4之心得体会_淡淡的香烟的博客-CSDN博客_android开发心得体会

7.本文博客源码地址如下:

https://gitee.com/jackning_admin/wanandroidsdk-http

8.总结:

本篇文章讲解了不使用第三方如何开发一个简单的sdk,从上面的截图和日志可以看到请求是成功的,而且结果也正常返回,这里只是简单的写了一个接口示例,因为用的是鸿洋大神的wanAndroid里面的开源api接口,都是一些很简单的接口和请求,一样的代码这里就不写多次了,使用HttpurlConnection做sdk接口请求是很常见的,希望本篇文章对大家用帮助,大家可以尝试一下写一个属于自己的简单sdk,像一些游戏、支付、音视频都是类似的做法,只是有不同的业务,进行不同的接口封装和参数传递,处理不同逻辑,下一篇分享一下使用kotlin开发的sdk,不过在sdk开发中很少这么干,因为不稳定和兼容性问题很多,所以现在市场上大部分sdk还是使用的java.

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值