封装安卓的okhttp
1.封装了get方法,handler更新主线程,回调的onsuccess,onfailure,onerror等方法
2.配置文件
api 'com.android.support:recyclerview-v7:26.1.0'
api 'com.squareup.okhttp3:okhttp:3.9.1'
//fastjson
api 'com.alibaba:fastjson:1.2.44'
3.先建立一个http包,建BaseHttpCallback和OkHttpHelper这2个类,以后会加loading...这个东西
public class OkHttpHelper {
private static OkHttpClient okHttpClient;
private android.os.Handler handler;
private OkHttpHelper(){
okHttpClient =new OkHttpClient();
handler =new android.os.Handler(Looper.getMainLooper());
};
public static OkHttpHelper getInstance(){
return new OkHttpHelper();
}
public void get(String url,BaseHttpCallback baseHttpCallback){
Request request = buildRequest(url,null,HttpMethodType.GET);
doRequest(request, baseHttpCallback);
}
public void post(String url, Map<String,String>params,BaseHttpCallback baseHttpCallback){
Request request = buildRequest(url,null,HttpMethodType.POST);
doRequest(request, baseHttpCallback);
}
public void doRequest(final Request request, final BaseHttpCallback baseHttpCallback){
baseHttpCallback.onRequestBefore(request);
okHttpClient.newCall(request).enqueue(new Callback() {
@Override
public void onFailure(Call call, IOException e) {
callbackFailure(baseHttpCallback,e);
}
@Override
public void onResponse(Call call, Response response) throws IOException {
if(response.isSuccessful()){
String s= response.body().string();
callbackSuccess(baseHttpCallback,response,s);
}else{
callbackError(baseHttpCallback,response,response.code());
}
}
});
}
private Request buildRequest(String url,Map<String,String> params,HttpMethodType methodType){
Request.Builder builder = new Request.Builder();
builder.url(url);
if(methodType==HttpMethodType.GET){
builder.get();
}else if(methodType==HttpMethodType.POST){
}
return builder.build();
}
enum HttpMethodType{
GET,
POST
}
private void callbackSuccess(final BaseHttpCallback callback, final Response response, final String s){
handler.post(new Runnable() {
@Override
public void run() {
callback.onSuccess(response,s);
}
});
}
private void callbackError(final BaseHttpCallback callback, final Response response, final int code){
handler.post(new Runnable() {
@Override
public void run() {
callback.onError(response,code,null);
}
});
}
private void callbackFailure(final BaseHttpCallback callback, final Exception e){
handler.post(new Runnable() {
@Override
public void run() {
callback.onFailure(e);
}
});
}
}
public abstract class BaseHttpCallback {
public abstract void onRequestBefore(Request request);
public abstract void onSuccess(Response response,String string);
public abstract void onError(Response response,int code,Exception e);
public abstract void onFailure(Exception e);
}
4. 还另外封装了个User类
public class User {
public String result;
public List<Data> data;
public class Data{
public String name;
public String age;
public String getName() {
return name;
}
public String getAge() {
return age;
}
}
public String getResult() {
return result;
}
public List<Data> getDatas() {
return data;
}
}
5.activity中调用例子
OkHttpHelper httpHelper =OkHttpHelper.getInstance();
String url = "http://www.baidu.com";
httpHelper.get(url,new BaseHttpCallback(){ @Override
public void onRequestBefore(Request request) { } @Override
public void onSuccess(Response response, String string) { } @Override
public void onError(Response response, int code, Exception e) { } @Override
public void onFailure(Exception e) {
Toast.makeText(MainActivity.this,"当前网络不可用,请检查网络",Toast.LENGTH_LONG).show();
}
});
6.未完善的,没有post,没有loading效果,
封装安卓的okhttp的更多相关文章
- 安卓通过OkHttp获取json数据
使用Http协议访问网络 OkHttp使用 可以很好的获取接口数据!json数据! 支持get和post提交方式!!! 1.引入模块 compile 'com.squareup.okhttp3:okh ...
- okhttp +fastJson 在UI层的回调封装
一直使用OkHttp 经常烦人的地方是回调方法 数据解析后必须通过handler 在主线程做操作 网上找了很多资料 发现有些都是基于Gson做的解析 fastJson 在封装时 泛型传入会有很多不方 ...
- 如何合理封装你的轮子、飞机、大炮(以封装OkHttp为例)
前言 对于程序员来说,很多时候,我们都在造房子,从学会框架或者是学会构建整个项目之后,慢慢的我们就会觉得自己在做的事情是一种重复劳动,很多时候只不过是换个面孔而已.而更快的造房子,造好看的房子可能是进 ...
- 安卓开发常用网络请求框架OkHttp、Volley、XUtils、Retrofit对比
网络请求框架总结1.xutils 此框架庞大而周全,这个框架可以网络请求,同时可以图片加载,又可以数据存储,又可以 View 注解,使用这种框架很方便,这样会使得你整个项目对它依赖性太强,万一 ...
- OKHttp使用详解
一,OKHttp介绍 okhttp是一个第三方类库,用于android中请求网络. 这是一个开源项目,是安卓端最火热的轻量级框架,由移动支付Square公司贡献(该公司还贡献了Picasso和Leak ...
- 框架--NoHttp和OkHttp哪个好用,Volley和NoHttp哪个好用?
NoHttp和OkHttp哪个好用,Volley和NoHttp哪个好用? NoHttp 源码及Demo托管在Github欢迎大家Star: https://github.com/Y0LANDA/NoH ...
- 【Android - 框架】之OkHttp的使用
OkHttp是一个非常优秀的网络访问框架,当下非常火的Retrofit的底层就是使用OkHttp进行封装的.接下来介绍以下OkHttp的简单使用. 1.导入依赖 在Android Studio中,在M ...
- Android中使用OKHttp上传图片,从相机和相册中获取图片并剪切
效果:注意:1:网络权限<;;;); intent.putExtra(); ); intent.putExtra(); intent.putExtra(, byteArrayOutputStre ...
- Xutils, OKhttp, Volley, Retrofit对比
Xutils这个框架非常全面,可以进行网络请求,可以进行图片加载处理,可以数据储存,还可以对view进行注解,使用这个框架非常方便,但是缺点也是非常明显的,使用这个项目,会导致项目对这个框架依赖非常的 ...
随机推荐
- java 单例模式(singleton)
概念: 保证一个类仅有一个实例,并提供一个访问它的全局访问点. 要点: 1.某个类只有一个实例. 2.它必须自行创建这个示例. 3.必须自行向整个系统提供这个示例. 实现: 1.拥有一个私有的构造器. ...
- 环境变量 - JDK
Linux 1. 备份并编辑配置文件 # cp /etc/profile /etc/profile.bak # vi /etc/profile 2. 设置JDK环境变量 export JAVA_HOM ...
- leetcode笔记--6 Add Digits
question: Given a non-negative integer num, repeatedly add all its digits until the result has only ...
- 在 Ubuntu 16.04 LTS 上安装 Python 3.6.0
原文连接:https://segmentfault.com/a/1190000007912666 最近 Python 3 发布了新版本 Python 3.6.0,好像又加入了不少黑魔法!- 由于暂时不 ...
- CSS3 : transition 属性
CSS3的 transition 属性用于状态过度效果! 1.语法: transition: property duration timing-function delay; -moz-transit ...
- linux学习笔记---学习总结②
table ----> 展示数据 table --->表格 border cellspacing cellpadding width height tr --->行 align th ...
- 02-Mysql数据库----初识
什么是数据(Data) 描述事物的符号记录称为数据,描述事物的符号既可以是数字,也可以是文字.图片,图像.声音.语言等,数据由多种表现形式,它们都可以经过数字化后存入计算机 在计算机中描述一个事物,就 ...
- [推荐]spring cloud 详解
http://blog.csdn.net/column/details/15197.html
- Datenode无法启动
执行start-dfs.sh后,或者执行datenode没有启动.很大一部分原因是因为在第一次格式化dfs后,启动并使用了hadoop,后来又重新执行了格式化命令 这时主节点namenode的clus ...
- Python 3 学习笔记之——错误和异常
1. 语法错误 Python 的语法错误被称为解析错,语法分析器会指出出错的代码行,并且在最先找到的错误的位置标记一个小小的箭头. >>> while True File " ...