Retrofit 相机相册上传头像

接口地址
https://www.zhaoapi.cn/file/upload  
参数
uid=用户id&file=文件
//上传头像
@Multipart
@POST(AppConstant.USER_UP_LOAD_PIC)
Call<UpLoadBean> upLoadPic(@Query("uid") String mobile, @Part MultipartBody.Part part);

//diaolog点击显示

final Dialog mdialog = new Dialog(getActivity(), R.style.my_dialog);
View dialog_view = LayoutInflater.from(MyApplication.getInstance()).inflate(R.layout.dialog_layout, null);
TextView xiangji = dialog_view.findViewById(R.id.xiangji);
TextView xiangce = dialog_view.findViewById(R.id.xiangce);
TextView quxiao = dialog_view.findViewById(R.id.quxiao);
//取消
quxiao.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {
        mdialog.cancel();
    }
});
//相机
xiangji.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {
        //打开相机 MediaStore.ACTION_IMAGE_CAPTURE 打开相机的Action
        Intent it = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
        //在Sdcard 中创建文件 存入图片
      String path = Environment.getExternalStorageDirectory() + "usericon.png";        it.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(new File(path)));
        //1.意图   2.requestCode 请求码
        startActivityForResult(it, 1000);
        mdialog.cancel();
    }
});
//相册
xiangce.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {
        //调取系统的相册  Intent.ACTION_PICK相册
        Intent it = new Intent(Intent.ACTION_PICK);
        //设置格式
        it.setType("image/*");
        startActivityForResult(it, 3000);
        mdialog.cancel();
    }
});
mdialog.setContentView(dialog_view);
mdialog.setTitle("修改用户头像");
Window window = mdialog.getWindow();
window.setGravity(Gravity.BOTTOM);
WindowManager.LayoutParams attributes = window.getAttributes();
attributes.x = 0;
attributes.y = -20;
attributes.width = getResources().getDisplayMetrics().widthPixels;
dialog_view.measure(0, 0);
attributes.height = dialog_view.getMeasuredHeight();
attributes.alpha = 9f;
window.setAttributes(attributes);
mdialog.setCanceledOnTouchOutside(true);
mdialog.show();

//---------------------------------------------------

//activityresult 回调

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    //当拍完照以后点击完成  会执行 onActivityResult 方法 调取裁剪功能
    String s = "";
    if (requestCode == 1000 && resultCode == RESULT_OK) {
        //调取裁剪功能  om.android.camera.action.CROP 裁剪的Action
        Intent it = new Intent("com.android.camera.action.CROP");
        //得到图片设置类型
        it.setDataAndType(Uri.fromFile(new File(path)), "image/*");
        //是否支持裁剪 设置 true 支持  false 不支持
        it.putExtra("CROP", true);
        //设置比例大小  1:1
        it.putExtra("aspectX", 1);
        it.putExtra("aspectY", 1);
        //输出的大小
        it.putExtra("outputX", 250);
        it.putExtra("outputY", 250);
        s = "相机";
        //将裁剪好的图片进行返回到Intent中
        it.putExtra("return-data", true);
        startActivityForResult(it, 2000);
    } else if (requestCode == 3000 && resultCode == RESULT_OK) {
        s = "相ce";
        //得到相册图片
        Uri uri = data.getData();
        //裁剪
        Intent it = new Intent("com.android.camera.action.CROP");
        //设置图片 以及格式
        it.setDataAndType(uri, "image/*");
        //是否支持裁剪
        it.putExtra("crop", true);
        //设置比例
        it.putExtra("aspectX", 1);
        it.putExtra("aspectY", 1);
        //设置输出的大小
        it.putExtra("outputX", 250);
        it.putExtra("outputY", 250);
        //是否支持人脸识别
        //           it.putExtra("onFaceDetection", true);
        //返回
        it.putExtra("return-data", true);
        startActivityForResult(it, 2000);

    }
    Log.i("xxx", "----1---" + s + "-------");
    //点击完裁剪的完成以后会执行的方法
    if (requestCode == 2000 && resultCode == RESULT_OK) {
        Bitmap bitmap = data.getParcelableExtra("data");
        //userIcon.setImageBitmap(bitmap);
        File resourceFile = getResourceFile(bitmap);
        RequestBody requestBody = RequestBody.create(MediaType.parse("image/*"), resourceFile);
        MultipartBody.Part part = MultipartBody.Part.createFormData("file", resourceFile.getName(), requestBody);
        SharedPreferences user = getActivity().getSharedPreferences("user", Context.MODE_PRIVATE);
        String uid = user.getString("uid", "");
        if (!uid.isEmpty() && !uid.equals("")) {
            presenter.getUpLoadData(uid, part);
        }
        Log.i("xxx", "----2---" + s + "-------");

    }
}

/-----------------------------------------------------

//生成图片file方法

private File getResourceFile(Bitmap bitmap) {
    File file = new File(getActivity().getFilesDir().getAbsolutePath());
    if (!file.exists()) {
        //如果file不存在 则创建此文件夹
        file.mkdirs();
    }
    //根据获取到的file文件夹 生成带根目录的图片文件
    File file1 = new File(file, "icon.png");
    try {
        FileOutputStream fileOutputStream = new FileOutputStream(file1);
        bitmap.compress(Bitmap.CompressFormat.PNG, 100, fileOutputStream);
        //刷新流
        fileOutputStream.flush();
        //关流
        fileOutputStream.close();
    } catch (Exception e) {
        e.printStackTrace();
    }
    return file1;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Retrofit2是一个流行的Android网络框架,可以通过注解和动态代理来简化网络请求的步骤。在使用Retrofit2进行文件上传时,可以使用@Multipart注解和@PartMap注解来实现多文件上传。\[1\] 具体的实现步骤如下: 1. 在Retrofit接口中使用@Multipart注解标记该方法为多部分请求。 2. 使用@POST注解指定上传文件的URL。 3. 使用@PartMap注解将文件参数以Map的形式传递给方法。 4. 在Map中,键是参数的名称,值是RequestBody类型的文件内容。 例如,可以使用以下代码来实现文件上传: ``` @Multipart @POST("upload") Observable<String> uploadFiles(@PartMap Map<String, RequestBody> files); ``` 其中,files是一个Map,键是文件参数的名称,值是RequestBody类型的文件内容。 Retrofit2之所以被广泛使用,是因为它能够根据注解封装网络请求,并通过转化器将原始的HTTP响应内容转化为我们需要的对象。这使得使用Retrofit2非常方便。\[2\]\[3\] #### 引用[.reference_title] - *1* *3* [Retrofit2 multpart多文件上传详解](https://blog.csdn.net/jdsjlzx/article/details/51649382)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [retrofit2上传文件总结](https://blog.csdn.net/u011323666/article/details/52288753)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值