Android基于OkHttp实现下载和上传图片
本文实例为大家分享了OkHttp实现下载图片和上传图片的具体代码,供大家参考,具体内容如下
MainActivity.java
publicclassMainActivityextendsAppCompatActivity{
privateStringPath="https://10.url.cn/eth/ajNVdqHZLLAxibwnrOxXSzIxA76ichutwMCcOpA45xjiapneMZsib7eY4wUxF6XDmL2FmZEVYsf86iaw/";
privatestaticfinalintSUCCESS=993;
privatestaticfinalintFALL=814;
Handlerhandler=newHandler(){
@Override
publicvoidhandleMessage(Messagemsg){
switch(msg.what){
//加载网络成功,进行UI的更新,处理得到的图片资源
caseSUCCESS:
//通过message,拿到字节数组
byte[]Picture=(byte[])msg.obj;
//使用BitmapFactory工厂,把字节数组转换为bitmap
Bitmapbitmap=BitmapFactory.decodeByteArray(Picture,0,Picture.length);
//通过ImageView,设置图片
mImageView_okhttp.setImageBitmap(bitmap);
break;
//当加载网络失败,执行的逻辑代码
caseFALL:
Toast.makeText(MainActivity.this,"网络异常",Toast.LENGTH_SHORT).show();
break;
default:
break;
}
}
};
privateImageViewmImageView_okhttp;
@Override
protectedvoidonCreate(BundlesavedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//初始化控件
initView();
}
privatevoidinitView(){
mImageView_okhttp=(ImageView)findViewById(R.id.imageView_okhttp);
}
/**
*根据点击事件获取络上的图片资源,使用的是OKhttp框架
*
*@paramview
*/
publicvoidPicture_okhttp_bt(Viewview){
//1.创建OKhttpClient对象
OkHttpClientokHttpClient=newOkHttpClient();
//2.建立Request对象,设置参数,请求方式如果是get,就不用设置,默认使用的就是get
Requestrequest=newRequest.Builder()
.url(Path)//设置请求网址
.build();//建立request对象
//3.创建一个Call对象,参数是request对象,发送请求
Callcall=okHttpClient.newCall(request);
//4.异步请求,请求加入调度
call.enqueue(newCallback(){
@Override//请求失败回调
publicvoidonFailure(Callcall,IOExceptione){
handler.sendEmptyMessage(FALL);
}
@Override//请求成功回调
publicvoidonResponse(Callcall,Responseresponse)throwsIOException{
//得到从网上获取资源,转换成我们想要的类型
byte[]Picture_bt=response.body().bytes();
//通过handler更新UI
Messagemessage=handler.obtainMessage();
message.obj=Picture_bt;
message.what=SUCCESS;
handler.sendMessage(message);
}
});
}
//当按钮点击时,执行使用OKhttp上传图片到服务器(http://blog.csdn.net/tangxl2008008/article/details/51777355)
//注意:有时候上传图片失败,是服务器规定还要上传一个Key,如果开发中关于网络这一块出现问题,就多和面试官沟通沟通
publicvoiduploading(Viewview){
//图片上传接口地址
Stringurl="https://www.718shop.com/sell/sell.m.picture.upload.do";
//创建上传文件对象
Filefile=newFile(Environment.getExternalStorageDirectory(),"big.jpg");
//创建RequestBody封装参数
RequestBodyfileBody=RequestBody.create(MediaType.parse("application/octet-stream"),file);
//创建MultipartBody,给RequestBody进行设置
MultipartBodymultipartBody=newMultipartBody.Builder()
.setType(MultipartBody.FORM)
.addFormDataPart("image","big.jpg",fileBody)
.build();
//创建Request
Requestrequest=newRequest.Builder()
.url(url)
.post(multipartBody)
.build();
//创建okhttp对象
OkHttpClientokHttpClient=newOkHttpClient.Builder()
.connectTimeout(10,TimeUnit.SECONDS)
.readTimeout(10,TimeUnit.SECONDS)
.writeTimeout(10,TimeUnit.SECONDS)
.build();
//上传完图片,得到服务器反馈数据
okHttpClient.newCall(request).enqueue(newCallback(){
@Override
publicvoidonFailure(Callcall,IOExceptione){
Log.e("ff","uploadMultiFile()e="+e);
}
@Override
publicvoidonResponse(Callcall,Responseresponse)throwsIOException{
Log.i("ff","uploadMultiFile()response="+response.body().string());
}
});
}
}
activity_main.xml
build.gradle//依赖
implementation'com.squareup.okhttp3:okhttp:3.4.2'
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。