最近用到的一种头像上传方式,写在这里~ 都是一些很简单的方法,直接上代码
加权限
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
//Intent隐式跳转至相册
Intent intent = new Intent();
intent.setAction(Intent.ACTION_GET_CONTENT);
intent.setType("image/*");
//判断是否有对应的Activity可以响应
if (intent.resolveActivity(getPackageManager()) != null)
{
startActivityForResult(intent,1);
}
Activity回调
switch (requestCode){
case 1:
//得到相册图片,转为file类型
if(data.getData() != null){
Uri uri = data.getData();
if(uri != null){
//调用工具类将uri图片转为path
String path = ImageUtil.getPath(this, uri);
if(path != null){
//将图片转为file
File file = new File(path);
//调用P层
updatePresenter.onUpdateHead(userId,sessionId,file);
}
}
}else {
return;
}
break;
}
M层
AccountService accountService = OkRetrofitUtil.retrofit.create(AccountService.class);
//上传图片需要 MultipartBody
RequestBody requestFile = RequestBody.create(MediaType.parse("multipart/form-data"), file);
MultipartBody.Part body = MultipartBody.Part.createFormData("image", file.getName(), requestFile);
Call<UpdateHeadBean> call = accountService.onUpdateHead(userId, sessionId, body);
call.enqueue(new Callback<UpdateHeadBean>() {
@Override
public void onResponse(Call<UpdateHeadBean> call, Response<UpdateHeadBean> response) {
UpdateHeadBean updateHeadBean = response.body();
updateCallBack.onUpdateHeadSuccess(updateHeadBean);
}
@Override
public void onFailure(Call<UpdateHeadBean> call, Throwable t) {
}
});
Service中接口参数
//修改用户头像
@Multipart
@POST(HttpUserUrlUtil.ICON_URL)
Call<UpdateHeadBean> onUpdateHead(@Header("userId")int userId, @Header("sessionId")String sessionId,
@Part MultipartBody.Part image);