一丶第一步,定义一些属性
private int num = 0;
private String[] name = {"相机", "相册", "取消"};
private String path = Environment.getExternalStorageDirectory() + "/publishedaboutI" + num + "con.png";
MultipartBody.Builder builder = new MultipartBody.Builder().setType(MultipartBody.FORM);
一丶第二步,点击跳转
AlertDialog dialog = new AlertDialog.Builder(PublishedAboutActivity.this)
.setTitle("相机相册")
.setIcon(R.mipmap.ic_launcher)
.setNegativeButton("取消", null)
.setItems(name, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
switch (which) {
case 0:
Intent it = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
it.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(new File(path)));
startActivityForResult(it, 100);
break;
case 1:
Intent it1 = new Intent(Intent.ACTION_PICK);
it1.setType("image/*");
startActivityForResult(it1, 200);
break;
}
}
})
.create();
dialog.show();
一丶第三步,在回调进去处理照片
//进行裁剪和赋值
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == 100 && resultCode == RESULT_OK) {
Intent it = new Intent("com.android.camera.action.CROP");
it.putExtra("crop", true);
it.setDataAndType(Uri.fromFile(new File(path)), "image/*");
it.putExtra("aspactX", 1);
it.putExtra("aspactY", 1);
it.putExtra("outputX", 80);
it.putExtra("outputY", 80);
it.putExtra("return-data", true);
startActivityForResult(it, 1000);
}
if (requestCode == 200 && resultCode == RESULT_OK) {
Intent it = new Intent("com.android.camera.action.CROP");
it.putExtra("crop", true);
Uri data1 = data.getData();
it.setDataAndType(data1, "image/*");
it.putExtra("aspactX", 1);
it.putExtra("aspactY", 1);
it.putExtra("outputX", 80);
it.putExtra("outputY", 80);
it.putExtra("return-data", true);
startActivityForResult(it, 1000);
}
if (requestCode == 1000 && resultCode == RESULT_OK) {
// Bitmap bm = data.getParcelableExtra("data");
// publishedaboutIcon.setImageBitmap(bm);
Bitmap bitmap = data.getParcelableExtra("data");
publishedaboutIcon.setImageBitmap(bitmap);
//获取文件路径
File file = new File(getFilesDir().getAbsolutePath());
if (!file.exists()) {
//如果路径不存在就创建
file.mkdirs();
}
//创建文件
File file1 = new File(file, "photo" + num + ".png");
FileOutputStream fileOutputStream;
try {
//文件输出流
fileOutputStream = new FileOutputStream(file1);
//将bitmap写入文件流
bitmap.compress(Bitmap.CompressFormat.PNG, 100, fileOutputStream);
//刷新此输出流并强制将所有缓冲的输出字节被写出
fileOutputStream.flush();
fileOutputStream.close();
} catch (Exception e) {
e.printStackTrace();
}
builder.addFormDataPart("jokeFiles", file1.getName(), RequestBody.create(MediaType.parse("image/*"), file1));
}
}
一丶第四步,在请求接口之前先拿到MultipartBody就可以进去网络请求了
MultipartBody body = builder.build();
(在请求接口的时候注意它的类型是 @Body RequestBody requestBody)