1.1图片选择工具类
package util;
import android.app.Activity;
import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.drawable.Drawable;
import android.net.Uri;
import android.os.Build;
import android.os.Bundle;
import android.os.Environment;
import android.provider.MediaStore;
import android.support.v4.content.FileProvider;
import android.widget.ImageView;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
/**
* Created by chenkb on 2018/8/2.
*/
public class ImageSelectorHelper {
private Activity mActivity;
public ImageSelectorHelper(Activity mActivity, ImageSelectorCallBack imageSelectorCallBack) {
this.mActivity = mActivity;
this.imageSelectorCallBack = imageSelectorCallBack;
}
private ImageSelectorCallBack imageSelectorCallBack;
//相册请求码
private static final int REQUEST_CODE_ALBUM = 888;
//相机请求码
private static final int REQUEST_CODE_CAMERA = 889;
//剪裁请求码
private static final int REQUEST_CODE_CROP = 890;
private static File tempFile;
public void setImageSelectorCallBack(ImageSelectorCallBack imageSelectorCallBack) {
this.imageSelectorCallBack = imageSelectorCallBack;
}
/**
* 从相册获取图片
*/
public void getPicFromAlbm() {
Intent photoPickerIntent = new Intent(Intent.ACTION_PICK, MediaStore.Audio.Media.EXTERNAL_CONTENT_URI);
photoPickerIntent.setType("image/*");
mActivity.startActivityForResult(photoPickerIntent, REQUEST_CODE_ALBUM);
}
/**
* 从相机获取图片
*/
public void getPicFromCamera() {
//用于保存调用相机拍照后所生成的文件
//跳转到调用系统相机
//用于保存调用相机拍照后所生成的文件
tempFile = new File(Environment.getExternalStorageDirectory().getPath(), System.currentTimeMillis() + ".jpg");
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
//判断版本
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { //如果在Android7.0以上,使用FileProvider获取Uri
intent.setFlags(Intent.FLAG_GRANT_WRITE_URI_PERMISSION);
Uri contentUri = FileProvider.getUriForFile(mActivity, mActivity.getPackageName(), tempFile);
intent.putExtra(MediaStore.EXTRA_OUTPUT, contentUri);
} else { //否则使用Uri.fromFile(file)方法获取Uri
intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(tempFile));
}
mActivity.startActivityForResult(intent, REQUEST_CODE_CAMERA);
}
/**
* 裁剪图片
*/
public void cropPhoto(Activity activity,Uri uri) {
Intent intent = new Intent("com.android.camera.action.CROP");
intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
intent.addFlags(Intent.FLAG_GRANT_WRITE_URI_PERMISSION);
intent.setDataAndType(uri, "image/*");
intent.putExtra("crop", "true");
intent.putExtra("aspectX", 1);
intent.putExtra("aspectY", 1);
intent.putExtra("outputX", 200);
intent.putExtra("outputY", 200);
intent.putExtra("return-data", true);
activity.startActivityForResult(intent, REQUEST_CODE_CROP);
}
public void onActivityResult(int requestCode, int resultCode, Intent intent){
switch (requestCode) {
// 调用相机后返回
case REQUEST_CODE_CAMERA:
if (resultCode == Activity.RESULT_OK) {
//用相机返回的照片去调用剪裁也需要对Uri进行处理
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
Uri contentUri = FileProvider.getUriForFile(mActivity, mActivity.getPackageName(), tempFile);
cropPhoto(mActivity,contentUri);//裁剪图片
} else {
cropPhoto(mActivity,Uri.fromFile(tempFile));//裁剪图片
}
}
break;
//调用相册后返回
case REQUEST_CODE_ALBUM:
if (resultCode == Activity.RESULT_OK) {
Uri uri = intent.getData();
cropPhoto(mActivity,uri);//裁剪图片
}
break;
//调用剪裁后返回
case REQUEST_CODE_CROP:
Bundle bundle = intent.getExtras();
if (bundle != null) {
//在这里获得了剪裁后的Bitmap对象,可以用于上传
Bitmap image = bundle.getParcelable("data");
//设置到ImageView上
//也可以进行一些保存、压缩等操作后上传
String path = saveImage("userHeader", image);
File file = new File(path);
if(imageSelectorCallBack!=null){
imageSelectorCallBack.onSelected(image,file);
}
}
break;
}
}
/**
* 保存图片到本地
*
* @param name
* @param bmp
* @return
*/
private String saveImage(String name, Bitmap bmp) {
File appDir = new File(Environment.getExternalStorageDirectory().getPath());
if (!appDir.exists()) {
appDir.mkdir();
}
String fileName = name + ".jpg";
File file = new File(appDir, fileName);
try {
FileOutputStream fos = new FileOutputStream(file);
bmp.compress(Bitmap.CompressFormat.JPEG, 100, fos);
fos.flush();
fos.close();
return file.getAbsolutePath();
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
public static interface ImageSelectorCallBack{
void onSelected(Bitmap imgBitmap,File imgFile);
}
}
1.1.1
图片上传工具类
package util;
import android.os.Environment;
import java.io.File;
import java.util.Map;
import bean.UploadImageBean;
import http.RequestParamsUtil;
import http.ResponseBean;
import http.RetrofitHelper;
import http.RxUtil;
import http.api.ServiceApi;
import http.subscriber.BaseSubscriber;
import okhttp3.MediaType;
import okhttp3.MultipartBody;
import okhttp3.RequestBody;
import rx.Subscription;
import widget.LoaddingDialog;
/**
* Created by chenkb on 2018/8/2.
*/
public class FileUploadUtil {
public static void uploadImage(String filePath,LoaddingDialog loaddingDialog, final UploadImageCallBack callBack){
File file = new File(filePath);
RequestBody requestBody =
RequestBody.create(MediaType.parse("image/jpg"), file);
MultipartBody.Part Access_token =
MultipartBody.Part.createFormData("Access_token", UserInfoSp.get("token","").toString());
MultipartBody.Part method =
MultipartBody.Part.createFormData("method", "UploadAvatar");
Subscription subscribe = RetrofitHelper.getRetrofit()
.create(ServiceApi.class)
.uploadFileImage(Access_token,method,requestBody)
.compose(RxUtil.<ResponseBean<UploadImageBean>>rxSchedulerHelper(loaddingDialog))
.subscribe(new BaseSubscriber<ResponseBean<UploadImageBean>>() {
@Override
public void onNextT(ResponseBean<UploadImageBean> dataBeanBaseBean) {
if(callBack!=null){
callBack.success(dataBeanBaseBean.getObj().getPath());
}
}
@Override
public void onErrorT(int errorCode, String msg) {
if(callBack!=null){
callBack.fail();
}
}
});
}
public static interface UploadImageCallBack{
void success(String path);
void fail();
}
}
1.1.1上传使用的是Retortfit2.0+okhttp3.+
ServiceApi.class
@Multipart
@POST("api.aspx")
Observable<ResponseBean<UploadImageBean>> uploadFileImage(@Part MultipartBody.Part Access_token, @Part MultipartBody.Part UploadAvatar, @Part("file\"; filename=\"upload.jpg") RequestBody file);
1.1.1.1数据处理基础实体类(可根据具体情况更改)
package http;
import java.util.List;
/**
* Created by chenkb on 2018/7/4.
*/
public class ResponseBean<T> {
/**
* list : [{"id":1,"name":"张三"},{"id":2,"name":"李四"}]
* property : {"obj_name":"user","is_list":true,"is_next":true,"total_size":11}
* error : {"err_msg":null,"err_code":0,"request_args":"page_no=1,page_size=10"}
*/
private PropertyBean property;
private ErrorBean error;
private List<T> list;
private T obj;
public T getObj() {
return obj;
}
public void setObj(T obj) {
this.obj = obj;
}
public PropertyBean getProperty() {
return property;
}
public void setProperty(PropertyBean property) {
this.property = property;
}
public ErrorBean getError() {
return error;
}
public void setError(ErrorBean error) {
this.error = error;
}
public List<T> getList() {
return list;
}
public void setList(List<T> list) {
this.list = list;
}
public static class PropertyBean {
/**
* obj_name : user
* is_list : true
* is_next : true
* total_size : 11
*/
private String obj_name;
private boolean is_list;
private boolean is_next;
private int total_size;
public String getObj_name() {
return obj_name;
}
public void setObj_name(String obj_name) {
this.obj_name = obj_name;
}
public boolean isIs_list() {
return is_list;
}
public void setIs_list(boolean is_list) {
this.is_list = is_list;
}
public boolean isIs_next() {
return is_next;
}
public void setIs_next(boolean is_next) {
this.is_next = is_next;
}
public int getTotal_size() {
return total_size;
}
public void setTotal_size(int total_size) {
this.total_size = total_size;
}
}
public static class ErrorBean {
/**
* err_msg : null
* err_code : 0
* request_args : page_no=1,page_size=10
*/
private String err_msg;
private int err_code;
private String request_args;
public String getErr_msg() {
return err_msg;
}
public void setErr_msg(String err_msg) {
this.err_msg = err_msg;
}
public int getErr_code() {
return err_code;
}
public void setErr_code(int err_code) {
this.err_code = err_code;
}
public String getRequest_args() {
return request_args;
}
public void setRequest_args(String request_args) {
this.request_args = request_args;
}
}
}
1.2帮助类使用
imageSelectorHelper=new ImageSelectorHelper(this,this);
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
imageSelectorHelper.onActivityResult(requestCode,resultCode,data);
}
@Override
public void onSelected(Bitmap imgBitmap, File imgFile) {
personInfoHeadIv.setImageBitmap(imgBitmap);
FileUploadUtil.uploadImage(imgFile.getPath(),loaddingDialog, new FileUploadUtil.UploadImageCallBack() {
@Override
public void success(String path) {
getUserInfo();
}
@Override
public void fail() {
toast("上传失败");
}
});
}
4万+

被折叠的 条评论
为什么被折叠?



