private ImageView img;//找到图片img并提成成员变量 private static String path = "/sdcard/myHead/";// sd路径 private Bitmap head;
private void img() { //alertDialog弹框 AlertDialog.Builder builder = new AlertDialog.Builder(context); final AlertDialog dialog = builder.create(); View view = View.inflate(context, R.layout.popopwindow, null); TextView tv_select_gallery = (TextView) view.findViewById(R.id.picture_pop); TextView tv_select_camera = (TextView) view.findViewById(R.id.photo_pop); TextView tv_select_cancel = (TextView) view.findViewById(R.id.cancel_pop); tv_select_gallery.setOnClickListener(new View.OnClickListener() {// 在相册中选取 @Override public void onClick(View v) { Intent intent1 = new Intent(Intent.ACTION_PICK, null); intent1.setDataAndType(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, "image/*"); ((ShowActivity)context).startActivityForResult(intent1, 1); dialog.dismiss(); } }); tv_select_camera.setOnClickListener(new View.OnClickListener() {// 调用照相机 @Override public void onClick(View v) { Intent intent2 = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); intent2.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(new File(Environment.getExternalStorageDirectory(), "head.png"))); ((ShowActivity)context).startActivityForResult(intent2, 2);//采用ForResult打开 dialog.dismiss(); } }); tv_select_cancel.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { dialog.dismiss(); } }); Window window = dialog.getWindow(); window.setGravity(Gravity.BOTTOM); dialog.setView(view); dialog.show(); } public void onActivityResult(int requestCode, int resultCode, Intent data) { switch (requestCode) { case 1: if (resultCode == RESULT_OK) { cropPhoto(data.getData());// 裁剪图片 } break; case 2: if (resultCode == RESULT_OK) { File temp = new File(Environment.getExternalStorageDirectory() + "/head.png"); cropPhoto(Uri.fromFile(temp));// 裁剪图片 } break; case 3: if (data != null) { Bundle extras = data.getExtras(); if (extras == null) { return; } head = extras.getParcelable("data"); if (head != null) { img.setImageBitmap(); String fileName = path + "/head.png";//图片名字 setPicToView(head);//保存在SD卡中 File file1 = new File(fileName); uploadPic(file1); } } break; default: break; } } //上传头像 private void uploadPic(File file1) { RequestBody file = RequestBody.create(MediaType.parse("multipart/form-data"),file1); MultipartBody.Part part=MultipartBody.Part.createFormData("file","head.png",file); Map<String,String> map = new HashMap<>(); map.put("uid",uid); new HttpUtil().part("/file/upload",map,part).result(new HttpUtil.HttpRxListener() { @Override public void success(String data) { Gson gson = new Gson(); BeanLogin beanLogin = gson.fromJson(data, BeanLogin.class); String code = beanLogin.getCode(); if("0".equals(code)){ Toast.makeText(context, "头像上传成功", Toast.LENGTH_SHORT).show(); } } @Override public void fail(String error) { } }); } /** * 调用系统的裁剪功能 * * @param uri */ public void cropPhoto(Uri uri) { Intent intent = new Intent("com.android.camera.action.CROP"); intent.setDataAndType(uri, "image/*"); intent.putExtra("crop", "true"); // aspectX aspectY 是宽高的比例 intent.putExtra("aspectX", 1); intent.putExtra("aspectY", 1); // outputX outputY 是裁剪图片宽高 intent.putExtra("outputX", 150); intent.putExtra("outputY", 150); intent.putExtra("return-data", true); ((ShowActivity)context).startActivityForResult(intent, 3); } private void setPicToView(Bitmap mBitmap) { String sdStatus = Environment.getExternalStorageState(); if (!sdStatus.equals(Environment.MEDIA_MOUNTED)) { // 检测sd是否可用 return; } FileOutputStream b = null; File file = new File(path); file.mkdirs();// 创建文件夹 String fileName = path + "head.png";// 图片名字 try { b = new FileOutputStream(fileName); mBitmap.compress(Bitmap.CompressFormat.JPEG, 100, b);// 把数据写入文件 } catch (FileNotFoundException e) { e.printStackTrace(); } finally { try { // 关闭流 b.flush(); b.close(); } catch (IOException e) { e.printStackTrace(); } } }
================================BaseService=======================================
@Multipart @POST Observable<ResponseBody> part(@Url String url, @QueryMap Map<String,String> map, @Part MultipartBody.Part part);
===============================网络请求工具类======================================
public class HttpUtil { private final BaseService baseService; private Observable<ResponseBody> observable; public HttpUtil(){ Retrofit retrofit = new Retrofit .Builder() .baseUrl("http://www.zhaoapi.cn/") .addCallAdapterFactory(RxJava2CallAdapterFactory.create()) .build(); baseService = retrofit.create(BaseService.class); } public HttpUtil get(String url, Map<String,String> map){ if(map==null){ map = new HashMap<>(); } observable = baseService.get(url, map); setObserver(); return this; } public HttpUtil post(String url, Map<String,String> map){ if(map==null){ map = new HashMap<>(); } observable = baseService.post(url, map); setObserver(); return this; } public HttpUtil part(String url, Map<String,String> map, MultipartBody.Part part){ if(map==null){ map = new HashMap<>(); } observable = baseService.part(url, map,part); setObserver(); return this; } private void setObserver() { observable.subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .subscribe(observer); } private Observer observer = new Observer<ResponseBody>(){ @Override public void onSubscribe(Disposable d) { } @Override public void onNext(ResponseBody responseBody) { try { String string = responseBody.string(); string = string.replace("https","http"); listener.success(string); } catch (IOException e) { e.printStackTrace(); } } @Override public void onError(Throwable e) { String message = e.getMessage(); listener.fail(message); } @Override public void onComplete() { } }; private HttpRxListener listener; public void result(HttpRxListener listener){ this.listener=listener; } public interface HttpRxListener{ void success(String data); void fail(String error); } }