基于OkHttpUtils再次封装代码最简化
2017-12-04 11:40
441 查看
Okhttp3是当前最流行的一个网络请求框架,它支持post,get,put等各种网络请求,最重要的是内部还带有缓存机制非常好用,与RxJava框架完美结合再加上当前主流的设计模式MVP实现,是不是让我们的代码更加优雅,美观呢
,本人刚出文章,菜鸟一枚,有任何不足之处欢迎指教,我的主要思想还是基于接口回调实现的,由于项目紧就抽了空随便写了下,有点类似MVP,如果有
不怎明白MVP模式原理的看完之后对你会有所帮助,好了话不多说,直接上代码
主要的类是HttpUtils 引用了一个OkhttpUtils工程,稍后附上源码地址
这两个类都是接口,定义了一个发送请求的接口和接收数据的接口用它与主Activity交互,如有不明白接口回调的请自行百度一下,这里我就不过多讲解了
还有一步就是在Applaction设置一下,OKHttp的配置
最后就是怎么使用请求了
封装了表单请求,和Json请求这两种主流请求方式,如需其它请求方式,请按照我的方法自行封装,是不是比之前一大串代码简单多了呢
最后附上项目下载地址 http://download.csdn.net/download/qq_33407981/10143900
,本人刚出文章,菜鸟一枚,有任何不足之处欢迎指教,我的主要思想还是基于接口回调实现的,由于项目紧就抽了空随便写了下,有点类似MVP,如果有
不怎明白MVP模式原理的看完之后对你会有所帮助,好了话不多说,直接上代码
主要的类是HttpUtils 引用了一个OkhttpUtils工程,稍后附上源码地址
package com.example.administrator.myproject; import android.app.Activity; import android.content.Context; import android.util.Log; import android.widget.Toast; import com.zhy.http.okhttp.OkHttpUtils; import com.zhy.http.okhttp.callback.StringCallback; import org.json.JSONException; import org.json.JSONObject; import java.io.IOException; import java.util.Map; import okhttp3.Call; import okhttp3.Callback; import okhttp3.MediaType; import okhttp3.Request; import okhttp3.RequestBody; import okhttp3.Response; /** * Created by LiuYX on 2017/12/1/001. */ public class HttpUtils implements HttpSendModel { public static final MediaType JSON = MediaType.parse("application/json; charset=utf-8"); private static HttpModel httpModel; private Context context; @Override public void sendHttp(Context context,HttpModel httpModel, String url, JSONObject jsonObject) { getPostHttpUtils(context,httpModel,url,jsonObject); } @Override public void sendFromHttp(Context context,HttpModel httpModel, String url, Map<String,String> map) { getPostFromHttpUtils(context,httpModel,url,map); } private class MyStringCallback extends StringCallback { @Override public void onBefore(Request request, int id) { } @Override public void onAfter(int id) { } @Override public void onError(Call call, Exception e, int id) { e.printStackTrace(); } @Override public void onResponse(String response, int id) { httpModel.onResult(response); } @Override public void inProgress(float progress, long total, int id) { Log.e("TSGGER", "inProgress:" + progress); } } private void getPostHttpUtils(Context context,HttpModel httpModel,String url,JSONObject jsonObject){ this.httpModel=httpModel; this.context=context; OkHttpUtils .postString() .url(url) .mediaType(MediaType.parse("application/json; charset=utf-8")) .addHeader("isupdate", "1") .addHeader("version", "1.1.14") .content(jsonObject.toString()) .build() .execute(new MyStringCallback()); }; private void getPostFromHttpUtils(Context context,HttpModel httpModel,String url,Map<String,String> map){ this.httpModel=httpModel; this.context=context; OkHttpUtils c6bd .post() .url(url) .addHeader("isupdate", "1") .addHeader("version", "1.1.14") .params(map) .build() .execute(new MyStringCallback()); }; }
这两个类都是接口,定义了一个发送请求的接口和接收数据的接口用它与主Activity交互,如有不明白接口回调的请自行百度一下,这里我就不过多讲解了
package com.example.administrator.myproject; import android.content.Context; import org.json.JSONObject; import java.util.Map; /** * Created by LiuYX on 2017/12/1/001. */ public interface HttpSendModel { void sendHttp(Context context, HttpModel httpModel, String url, JSONObject jsonObject); void sendFromHttp(Context context, HttpModel httpModel, String url, Map<String,String> map); }
package com.example.administrator.myproject; import org.json.JSONObject; /** * Created by LiuYX on 2017/12/1/001. */ public interface HttpModel { void onResult(String str); }
还有一步就是在Applaction设置一下,OKHttp的配置
ClearableCookieJar cookieJar1 = new PersistentCookieJar(new SetCookieCache(), new SharedPrefsCookiePersistor(getApplicationContext())); // File cacheFile = new File(context.getExternalCacheDir(), "KairuCache");//缓存路径 // Cache cache = new Cache(cacheFile, 1024 * 1024 * 40);//设置缓存大小为40M HttpsUtils.SSLParams sslParams = HttpsUtils.getSslSocketFactory(null, null, null); // CookieJarImpl cookieJar1 = new CookieJarImpl(new MemoryCookieStore()); OkHttpClient okHttpClient = new OkHttpClient.Builder() // .cache(cache) .connectTimeout(10000L, TimeUnit.MILLISECONDS) .readTimeout(10000L, TimeUnit.MILLISECONDS) .addInterceptor(new LoggerInterceptor("TAG")) .cookieJar(cookieJar1) .hostnameVerifier(new HostnameVerifier() { @Override public boolean verify(String hostname, SSLSession session) { return true; } }) .sslSocketFactory(sslParams.sSLSocketFactory, sslParams.trustManager) .build(); OkHttpUtils.initClient(okHttpClient);
最后就是怎么使用请求了
package com.example.administrator.myproject; import android.os.Bundle; import android.util.Log; import android.view.View; import android.widget.Toast; import org.json.JSONException; import org.json.JSONObject; import java.util.HashMap; import java.util.Map; public class MainActivity extends BaseActivity { String ss=""; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); findViewById(R.id.myTxt).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { postJson(); } }); findViewById(R.id.myFrom).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { postFrom(); } }); } public void postJson() { final JSONObject jsonObject=new JSONObject(); try { jsonObject.put("id", ""); } catch (JSONException e) { e.printStackTrace(); } new HttpUtils().sendHttp(this,new HttpModel() { @Override public void onResult(String str) { Toast.makeText(MainActivity.this,"请求成功"+str,Toast.LENGTH_SHORT).show(); } },BaseContants.MM_USERBASE, jsonObject); } public void postFrom() { Map<String,String> map=new HashMap<>(); map.put("id", ""); new HttpUtils().sendFromHttp(this,new HttpModel() { @Override public void onResult(String str) { Toast.makeText(MainActivity.this,"请求成功"+str,Toast.LENGTH_SHORT).show(); } },BaseContants.MM_USERBASEFROM, map); } }
封装了表单请求,和Json请求这两种主流请求方式,如需其它请求方式,请按照我的方法自行封装,是不是比之前一大串代码简单多了呢
最后附上项目下载地址 http://download.csdn.net/download/qq_33407981/10143900
相关文章推荐
- Android基于OkHttpUtils网络请求的二次封装
- 基于okHttpUtils网络请求的基类抽取升级版
- 基于angular2 的 http服务封装的实例代码
- 毕加索的艺术——Picasso,一个强大的Android图片下载缓存库,OkHttpUtils的使用,二次封装PicassoUtils实现微信精选
- 毕加索的艺术——Picasso,一个强大的Android图片下载缓存库,OkHttpUtils的使用,二次封装PicassoUtils实现微信精选
- OkHttp框架从入门到放弃,解析图片使用Picasso裁剪,二次封装OkHttpUtils,Post提交表单数据
- 优雅设计封装基于Okhttp3的网络框架(一):Http网络协议与Okhttp3解析
- JedisUtil再封装(基于连接池,简化代码)
- OKNetWorkHttp基于 AFNetworking 二次封装 业务更加简单清晰
- 基于OkHttpUtils自己实现一个检查升级软件功能
- OkHttp框架从入门到放弃,解析图片使用Picasso裁剪,二次封装OkHttpUtils,Post提交表单数据
- OkHttp框架从入门到放弃,解析图片使用Picasso裁剪,二次封装OkHttpUtils,Post提交表单数据
- 基于HttpClient的HttpUtils(后台访问URL)
- 基于HttpClient的HttpUtils(后台访问URL)
- 微信小程序封装http访问网络库实例代码
- HttpRequest Java原生代码封装
- 基于byte[]的HTTP协议头分析代码
- Android网络框架之----OKHttp简单二次封装
- 基于okhttp3的工具类HttpUtils
- Android中ListView、GridView的通用适配封装简化代码