Retrofit 实现头像上传

最近用到的一种头像上传方式,写在这里~ 都是一些很简单的方法,直接上代码

加权限

<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);

猜你喜欢

转载自blog.csdn.net/qq_42809182/article/details/86559153