火热轻量级网络框架okhttp3的使用
okhttp3是网上最火的一款轻量级网络框架 该框架能够高效率的允许连接到同一个主机地址的所有请求 同时 还能够缓存响应数据来减少重复的网络请求 以及数据流量的消耗…
- OKhttp使用
compile 'com.squareup.okhttp3:okhttp:3.2.0'
compile 'com.squareup.okio:okio:1.7.0'
<!--网络权限-->
<uses-permission android:name="android.permission.INTERNET"/>
<!--文件操作权限-->
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
OkHttpClient 对象初始化方法
okhttp有属性设置
private OkHttpClient okHttpC =null;
OkHttpClient.Builder builder = new OkHttpClient.Builder()
.connectTimeout(120, TimeUnit.SECONDS)
.readTimeout(120, TimeUnit.SECONDS)
.writeTimeout(120, TimeUnit.SECONDS);
okHttpC = builder.build();
OkHttpClient(无属性)
OkHttpClient okHttpC = new OkHttpClient();
Request(请求对象) 请求网络url地址
Request request = new Request.Builder().get().
.url("")
.build();
同步请求(这里要try catch),当okhttp请求任务时还没被释放这时再次请求会造成线程阻塞,直至第一个任务解锁完成后第二个任务才能被执行
Response response = okHttpC.newCall(request).execute();
System.out.println(response.body().string())
异步请求 (开启子线程请求操作在子线程里完成)
okHttpC.newCall(request).enqueue(new Callback() {
@Override
public void onFailure(Call call, IOException e) {
}
@Override
public void onResponse(Call call, Response response) throws IOException {
}
});
post请求(RequestBody 请求处理传参)
RequestBody formBody = new FormBody.Builder()
.add("name", "e")
.build();
Request request =new Request.Builder().url("").post(formBody).build();
okHttpC.newCall(request).enqueue(new Callback() {
@Override
public void onFailure(Call call, IOException e) {
}
@Override
public void onResponse(Call call, Response response) throws IOException {
runOnUiThread(new Runnable() {
@Override
public void run() {
Toast.makeText(getApplicationContext(), "请求成功", Toast.LENGTH_SHORT).show();
}
});
} });
文件下载
OkHttpClient okHttpC = new OkHttpClient();
Request request = new Request.Builder()
.url("")
.build();
okHttpC.newCall(request).enqueue(new Callback() {
@Override
public void onFailure(Call call, IOException e) {
}
@Override
public void onResponse(Call call, Response response) throws IOException {
if (response != null && response.isSuccessful()) {
InputStream inputStream = response.body().byteStream();
BufferedInputStream bis = new BufferedInputStream(inputStream);
FileOutputStream fos = new FileOutputStream(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS) + File.separator +"download2.apk");
byte[] data = new byte[10 * 1024];
int len;
while ((len = bis.read(data)) != -1) {
fos.write(data, 0, len);
}
Log.i("TAG", "保存文件成功");
fos.flush();
fos.close();
bis.close();
}
}
});