在更换头像 选择图片的时候经常会吊起手机的图库去选择图片 赋到控件上 存入到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; } } };以上完成了图片上传操作。