package com.example.dell.uploadavatars.view.activity; import android.content.DialogInterface; import android.content.Intent; import android.graphics.Bitmap; import android.net.Uri; import android.os.Bundle; import android.os.Environment; import android.provider.MediaStore; import android.support.v4.graphics.drawable.RoundedBitmapDrawable; import android.support.v4.graphics.drawable.RoundedBitmapDrawableFactory; import android.support.v7.app.AlertDialog; import android.util.Log; import android.view.View; import android.widget.Button; import android.widget.ImageView; import android.widget.Toast; import com.bumptech.glide.Glide; import com.bumptech.glide.request.target.BitmapImageViewTarget; import com.example.dell.uploadavatars.R; import com.example.dell.uploadavatars.bean.GrBean; import com.example.dell.uploadavatars.bean.Test; import com.example.dell.uploadavatars.persenter.MyPresenter; import com.example.dell.uploadavatars.view.IView; import java.io.File; import java.io.FileOutputStream; import okhttp3.MediaType; import okhttp3.MultipartBody; import okhttp3.RequestBody; public class MainActivity extends BaseActivity<MyPresenter> implements IView{ // private static final int REQUEST_CAMERA_1 = 1; // private static final int REQUEST_CAMERA_2 = 2; private String pic_path = Environment.getExternalStorageDirectory() + "/head1.jpg"; //裁剪完成之后图片保存的路径 private String crop_icon_path = Environment.getExternalStorageDirectory() + "/head_icon.jpg"; private MyPresenter presenter; private ImageView img; private Button bt; private File file; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); } @Override MyPresenter setPresenter() { return new MyPresenter(); } @Override protected int setLayout() { return R.layout.activity_main; } @Override void initView() { BasePresenter.loadDataServerGr("10240"); img = findViewById(R.id.img); bt = findViewById(R.id.bt); bt.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { final AlertDialog.Builder normalDialog = new AlertDialog.Builder(MainActivity.this); normalDialog.setMessage("请选择"); normalDialog.setPositiveButton("相机", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { paiZhao(); } }); normalDialog.setNegativeButton("相册", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { XiangCe(); } }); // 显示 normalDialog.show(); } }); } private void XiangCe() { Intent intent = new Intent(); //指定选择/获取的动作...PICK获取,拿 intent.setAction(Intent.ACTION_PICK); //指定获取的数据的类型 intent.setType("image/*"); startActivityForResult(intent, 3000); } private void paiZhao() { Intent intent = new Intent(); //指定动作...拍照的动作 CAPTURE...捕获 intent.setAction(MediaStore.ACTION_IMAGE_CAPTURE); //给相机传递一个指令,,,告诉他拍照之后保存..MediaStore.EXTRA_OUTPUT向外输出的指令,,,指定存放的位置 intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(new File(pic_path))); //拍照的目的是拿到拍的图片 startActivityForResult(intent, 1000); } private void crop(Uri uri) { Intent intent = new Intent(); //指定裁剪的动作 intent.setAction("com.android.camera.action.CROP"); //设置裁剪的数据(uri路径)....裁剪的类型(image/*) intent.setDataAndType(uri, "image/*"); //执行裁剪的指令 intent.putExtra("crop", "true"); //指定裁剪框的宽高比 intent.putExtra("aspectX", 1); intent.putExtra("aspectY", 1); //指定输出的时候宽度和高度 intent.putExtra("outputX", 300); intent.putExtra("outputY", 300); //设置取消人脸识别 intent.putExtra("noFaceDetection", false); //设置返回数据 intent.putExtra("return-data", true); // startActivityForResult(intent, 2000); } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if (requestCode == 1000 && resultCode == RESULT_OK) { //拍照保存之后进行裁剪....根据图片的uri路径 crop(Uri.fromFile(new File(pic_path))); } //获取相册图片 if (requestCode == 3000 && resultCode == RESULT_OK) { //获取的是相册里面某一张图片的uri地址 Uri uri = data.getData(); Log.d("data------",data+""); //根据这个uri地址进行裁剪 crop(uri); } if(requestCode == 2000 && resultCode == RESULT_OK){ Bitmap bitmap = data.getParcelableExtra("data"); File saveIconFile = new File(crop_icon_path); if (saveIconFile.exists()) { saveIconFile.delete(); } try { saveIconFile.createNewFile(); FileOutputStream fos = new FileOutputStream(saveIconFile); //把bitmap通过流的形式压缩到文件中 bitmap.compress(Bitmap.CompressFormat.PNG, 100, fos); fos.flush(); fos.close(); //通过file对象创建一个请求体 RequestBody requestFile = RequestBody.create(MediaType.parse("multipart/form-data"), saveIconFile); //通过请求体对象 构建MultipartBody.Part对象 //"file" 接口里面参数的名 MultipartBody.Part part = MultipartBody.Part.createFormData("file", saveIconFile.getName(), requestFile); //保存到sd卡中之后再去把文件上传到服务器 BasePresenter.loadDataServer("10240",part,"EB52D99F972FFFA5BB57D4C1B3397877"); Log.e("file=====",part.body()+""); } catch (Exception e) { e.printStackTrace(); } } } @Override void initData() { } @Override public void onSuccess(Test test) { Toast.makeText(this,"上传成功",Toast.LENGTH_SHORT).show(); } @Override public void onErr( String errMsg) { Toast.makeText(this,"上传失败",Toast.LENGTH_SHORT).show(); } //个人中心 @Override public void chenggong(GrBean bean) { Glide.with(this).load(bean.getData().getIcon()).asBitmap().centerCrop().into(new BitmapImageViewTarget(img) { @Override protected void setResource(Bitmap resource) { RoundedBitmapDrawable circularBitmapDrawable = RoundedBitmapDrawableFactory.create(MainActivity.this.getResources(), resource); circularBitmapDrawable.setCircular(true); img.setImageDrawable(circularBitmapDrawable); } }); Toast.makeText(this,"个人中心",Toast.LENGTH_SHORT).show(); } @Override public void shibai(String msg) { Toast.makeText(this,"个人中心失败",Toast.LENGTH_SHORT).show(); } @Override protected void onDestroy() { super.onDestroy(); presenter.dechView(); }
}
p
package com.example.dell.uploadavatars.persenter; import android.util.Log; import com.example.dell.uploadavatars.bean.GrBean; import com.example.dell.uploadavatars.bean.Test; import com.example.dell.uploadavatars.model.https.RetrofitUntils; import com.example.dell.uploadavatars.view.IView; import io.reactivex.Observable; import io.reactivex.Observer; import io.reactivex.android.schedulers.AndroidSchedulers; import io.reactivex.disposables.Disposable; import io.reactivex.schedulers.Schedulers; import okhttp3.MultipartBody; /** * Created by DELL on 2018/5/28. */ public class MyPresenter extends BasePresenter<IView> { private RetrofitUntils retrofitUntils; public MyPresenter(){ //拿到单例 retrofitUntils=RetrofitUntils.getInsatnce(); } public void loadDataServer(String uid, MultipartBody.Part file,String token){ Observable<Test> testObservable = retrofitUntils.getApi().uploadFile(uid, file,token); testObservable.subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .subscribe(new Observer<Test>() { @Override public void onSubscribe(Disposable d) { } @Override public void onNext(Test test) { getView().onSuccess(test); Log.e("qq",test.getMsg()); } @Override public void onError(Throwable e) { getView().onErr(e.getMessage()); } @Override public void onComplete() { } }); } public void loadDataServerGr(String uid){ Observable<GrBean> observable = retrofitUntils.getApi().getBean(uid); observable.subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .subscribe(new Observer<GrBean>() { @Override public void onSubscribe(Disposable d) { } @Override public void onNext(GrBean grBean) { getView().chenggong(grBean); Log.e("GronNext",grBean.getMsg()); } @Override public void onError(Throwable e) { getView().onErr(e.getMessage()); Log.e("GronError",e.getMessage()); } @Override public void onComplete() { } }); } }