4.12 从相册中选择图片并且上传到服务器

在更换头像 选择图片的时候经常会吊起手机的图库去选择图片  赋到控件上 存入到File中 方便之后上传到服务器上。

1.打开系统的相册

// 使用意图直接调用手机相册
Intent intent = new Intent(Intent.ACTION_PICK,
        android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
// 打开手机相册,设置请求码
startActivityForResult(intent, 88);

2.回调

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (resultCode != RESULT_OK) {
        return;
    } else {
        switch (requestCode) {
            case 88:
                resizeImage(data.getData());
                break;

            case 66:
                if (data != null) {
                    showResizeImage(data);
                }
                break;
        }
    }
    super.onActivityResult(requestCode, resultCode, data);
}

3.resizeImage方法 对选择的图片进行裁剪

//这里增加裁剪
public void resizeImage(Uri uri) {
    Intent intent = new Intent("com.android.camera.action.CROP");
    intent.setDataAndType(uri, "image/*");
    intent.putExtra("crop", "true");
    intent.putExtra("aspectX", 1);
    intent.putExtra("aspectY", 1);
    //裁剪的大小
    intent.putExtra("outputX", 150);
    intent.putExtra("outputY", 150);
    intent.putExtra("return-data", true);
    //设置返回码
    startActivityForResult(intent, 66);
}

4.ShowResizeImage方法 对裁剪以后的图片赋到控件上

private void showResizeImage(Intent data) {
    Bundle extras = data.getExtras();
    if (extras != null) {
        Bitmap photo = extras.getParcelable("data");
        //裁剪之后设置保存图片的路径
         path = getFilesDir().getPath() + File.separator + "image";
        MyLog.d(path);
        //压缩图片
        ImageUtils.saveImage(photo, path);
        new BitmapDrawable();
        Drawable drawable = new BitmapDrawable(photo);
        ivChoose.setImageDrawable(drawable);
        flag=true;
    }
}

注意: path 裁剪之后保存图片的路径 /data/data/com.bibi.cangchu/files/image

private boolean flag=false; //false  没有选择图片   true 选择了图片

压缩图片工具类  ImageUtils

public class ImageUtils {
    public static boolean saveImage(Bitmap photo, String spath) {
        try {
            BufferedOutputStream bos = new BufferedOutputStream(
                    new FileOutputStream(spath, false));
            photo.compress(Bitmap.CompressFormat.JPEG, 100, bos);
            bos.flush();
            bos.close();
        } catch (Exception e) {
            e.printStackTrace();
            return false;
        }
        return true;
    }

    public static Bitmap drawableToBitmap(Drawable drawable) {
        //  drawable 的长宽
        int w = drawable.getIntrinsicWidth();
        int h = drawable.getIntrinsicHeight();

        //  drawable 的颜色格式
        Bitmap.Config config = drawable.getOpacity() != PixelFormat.OPAQUE ? Bitmap.Config.ARGB_8888
                : Bitmap.Config.RGB_565;
        // 建立对应 bitmap
        Bitmap bitmap = Bitmap.createBitmap(w, h, config);
        // 建立对应 bitmap 的画布
        Canvas canvas = new Canvas(bitmap);
        drawable.setBounds(0, 0, w, h);
        //  drawable 内容画到画布中
        drawable.draw(canvas);
        return bitmap;
    }

}

上面的操作已经把选择的图片赋到控件上了   

5.上传图片+其他参数    图片以流的形式  

sAccountNum

账号

String

sProblemDes

问题描述

String

sProblemImage

图片

sTelePhone                                

手机号                                                                                   

String

 MyToast.showShort(FankuiActivity.this,"正在提交,请稍后!");
 /*提交问题*/
OkHttpClient httpClient = new OkHttpClient();
 MultipartBody.Builder builder = new MultipartBody.Builder("AaB03x").setType(MultipartBody.FORM);
 MultipartBody.Builder imgbody = new MultipartBody.Builder("BbC04y");

     imgbody.addPart(Headers.of("Content-Disposition", "form-data"),
             RequestBody.create(MediaType.parse("image/png"), new File(path)));
 builder.addFormDataPart("sProblemImage",null, imgbody.build())
             .addFormDataPart("sAccountNum",PrefUtils.getString(Constants.USER_INFO.SACCOUNTNUM,"",FankuiActivity.this))
             .addFormDataPart("sProblemDes",etQuestion.getText().toString().trim())
             .addFormDataPart("sTelePhone",etPhone.getText().toString().trim())
             .build();


 MyLog.d("=="+imgbody.build()+"==="+etQuestion.getText().toString().trim()+"==="+etPhone.getText().toString().trim());


 RequestBody body = builder.build();
 Request request = new Request.Builder()
         .url(Constants.URLS.URLSUBMITFANKUI)
         .post(body)
         .build();
  Call call = httpClient.newCall(request);
 call.enqueue(new Callback() {
     @Override
     public void onFailure(Call call, IOException e) {

         Message msg=Message.obtain();
         msg.what=1;
         handler.sendMessage(msg);
     }

     @Override
     public void onResponse(Call call, Response response) throws IOException {

         Message msg=Message.obtain();
         msg.what=0;
         handler.sendMessage(msg);
     }
 });
private Handler handler=new Handler(){
    @Override
    public void handleMessage(Message msg) {
        super.handleMessage(msg);
        switch (msg.what){
            case 0:
                MyToast.showShort(FankuiActivity.this,"提交成功!");
                finish();
                break;
            case 1:
                MyToast.showShort(FankuiActivity.this,"网络异常,稍后再试!");
                finish();
                break;
        }
    }
};
以上完成了图片上传操作。
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值