现在越来越多的项目中使用到了okhttp,今天我就来带大家学习学习!!!
1.添加依赖
这是3的依赖,和3之前的方法使用有区别;
compile 'com.squareup.okhttp3:okhttp:3.0.1'
compile 'com.squareup.okhttp3:logging-interceptor:3.0.1'
2.设置缓存
工具类OkUtils:
public static OkHttpClient getOkHttpClient (Activity activity) {
File file = new File(activity.getCacheDir(), "xianzaishi");
Cache cache = new Cache(file, 15 * 1024 * 1024);
OkHttpClient client = new OkHttpClient.Builder().cache(cache)
.connectTimeout(5, TimeUnit.SECONDS)
.readTimeout(5, TimeUnit.SECONDS)
.writeTimeout(5, TimeUnit.SECONDS)
.addInterceptor(new HttpLoggingInterceptor())
.retryOnConnectionFailure(true)
.build();
}
3.get异步请求方式
Request request = new Request.Builder().get().url("url").build();
OkUtils.getOkHttpClient.newCall(request).enqueue(new Callback() {
@Override
public void onFailure(Call call, IOException e) {
}
@Override
public void onResponse(Call call, Response response) throws IOException {
}
});
4.get同步请求
Request request = new Request.Builder().get().url("url").build();
try {
Response response = client.newCall(request).execute();
if (response.isSuccessful()) {//实质是判断返回码是不是在200到300之间
String string = response.body().string();//可以转为字符串json
// byte[] bytes = response.body().bytes();//可以转为字节数组
// InputStream inputStream = response.body().byteStream();//可以转为输入流
//看得出回调子线程,你可以写一个工具类将结果运行在UI线程就可了
}
} catch (IOException e) {
e.printStackTrace();
Toast.makeText(activity,"请求失败",Toast.LENGTH_LONG).show();
}
5.post异步请求
很简单
Request request = new Request.Builder().get().url("url").build();把get里面的get变为post(RequestBody)就可以了
FormBody formoody = new FormBody.Builder()
.add("uid", "10025")
.add("pageSize", "10")
.add("curPage", "0")
.add("status", "0")
.build();
note:FormBody 是RequestBody的子类;
Request request = new Request.Builder().post(formoody).url("url").build();
okHttpClient.newCall(request).enqueue(new Callback() {
@Override
public void onFailure(Call call, IOException e) {
UiUtils.runOnUiThread(new Runnable() {
@Override
public void run() {
mListener.onFail();
}
});
}
@Override
public void onResponse(Call call, Response response) throws IOException {
final String string = response.body().string();
//这是我自己写的工具类,不是系统的,么么哒
UiUtils.runOnUiThread(new Runnable() {
@Override
public void run() {
}
});
}
});
仔细看下,和get没多大区别;
6.post同步请求
//前面的代码和异步的一样
try {
Response response = okHttpClient.newCall(request).execute();
boolean successful = response.isSuccessful();
if (successful) {
String string = response.body().string();
}
} catch (IOException e) {
e.printStackTrace();
}
7.提交file
public static final MediaType MEDIA_TYPE_MARKDOWN
= MediaType.parse("text/x-markdown; charset=utf-8");
Request request = new Request.Builder()
.url("https://api.github.com/markdown/raw")
.post(RequestBody.create(MEDIA_TYPE_MARKDOWN, file))//这个file就是我们要提交的
.build();
//使用同步
try {
Response response = okHttpClient.newCall(request).execute();
boolean successful = response.isSuccessful();
if (successful) {
String string = response.body().string();
}
} catch (IOException e) {
e.printStackTrace();
}
未完待续!!!下集更精彩!!!