上传头像

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() {

                    }
                });
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值