上传头像

//权限
 <!--网络权限-->
    <uses-permission android:name="android.permission.INTERNET"/>
    <!--读写SD卡权限-->
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
    <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" />

//依赖

 //Retrofit依赖
    compile 'com.squareup.retrofit2:retrofit:2.3.0'
    //数据解析
    compile 'com.squareup.retrofit2:converter-gson:2.3.0'
    //关联RXJava
    compile 'com.squareup.retrofit2:adapter-rxjava2:2.3.0'
    //RxJava依赖
    compile 'io.reactivex.rxjava2:rxandroid:2.0.1'
    compile 'io.reactivex.rxjava2:rxjava:2.1.7'
    compile 'org.greenrobot:greendao:3.2.2' // add library



//Shang_Bean

public class Shang_Bean<T> {
    private String msg;
    private String code;
    private T data;

    public T getData() {
        return data;
    }

    public void setData(T data) {
        this.data = data;
    }

    public String getMsg() {
        return msg;
    }

    public void setMsg(String msg) {
        this.msg = msg;
    }

    public String getCode() {
        return code;
    }

    public void setCode(String code) {
        this.code = code;
    }
}


//User_Bean
public class User_Bean {

    private Object age;
    private String appkey;
    private String appsecret;
    private String createtime;
    private Object email;
    private Object fans;
    private Object follow;
    private Object gender;
    private String icon;
    private Object latitude;
    private Object longitude;
    private String mobile;
    private Object money;
    private String nickname;
    private String password;
    private Object praiseNum;
    private String token;
    private String uid;
    private Object userId;
    private String username;

    public Object getAge() {
        return age;
    }

    public void setAge(Object age) {
        this.age = age;
    }

    public String getAppkey() {
        return appkey;
    }

    public void setAppkey(String appkey) {
        this.appkey = appkey;
    }

    public String getAppsecret() {
        return appsecret;
    }

    public void setAppsecret(String appsecret) {
        this.appsecret = appsecret;
    }

    public String getCreatetime() {
        return createtime;
    }

    public void setCreatetime(String createtime) {
        this.createtime = createtime;
    }

    public Object getEmail() {
        return email;
    }

    public void setEmail(Object email) {
        this.email = email;
    }

    public Object getFans() {
        return fans;
    }

    public void setFans(Object fans) {
        this.fans = fans;
    }

    public Object getFollow() {
        return follow;
    }

    public void setFollow(Object follow) {
        this.follow = follow;
    }

    public Object getGender() {
        return gender;
    }

    public void setGender(Object gender) {
        this.gender = gender;
    }

    public String getIcon() {
        return icon;
    }

    public void setIcon(String icon) {
        this.icon = icon;
    }

    public Object getLatitude() {
        return latitude;
    }

    public void setLatitude(Object latitude) {
        this.latitude = latitude;
    }

    public Object getLongitude() {
        return longitude;
    }

    public void setLongitude(Object longitude) {
        this.longitude = longitude;
    }

    public String getMobile() {
        return mobile;
    }

    public void setMobile(String mobile) {
        this.mobile = mobile;
    }

    public Object getMoney() {
        return money;
    }

    public void setMoney(Object money) {
        this.money = money;
    }

    public String getNickname() {
        return nickname;
    }

    public void setNickname(String nickname) {
        this.nickname = nickname;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public Object getPraiseNum() {
        return praiseNum;
    }

    public void setPraiseNum(Object praiseNum) {
        this.praiseNum = praiseNum;
    }

    public String getToken() {
        return token;
    }

    public void setToken(String token) {
        this.token = token;
    }

    public String getUid() {
        return uid;
    }

    public void setUid(String uid) {
        this.uid = uid;
    }

    public Object getUserId() {
        return userId;
    }

    public void setUserId(Object userId) {
        this.userId = userId;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }
}
//My_Url
public class My_Url {
    public static final String SHANG="http://120.27.23.105/";
}

//Shang_View
public interface Shang_View {
    void onSuccess(String msg);
}

//Shang_Model
public class Shang_Model {
    public void loginUpload(String phone, String pwd, final File file, final Shang_View shang_view) {
        My_APi my_aPi = RetrofitHelper.getRetrofit(My_Url.SHANG).create(My_APi.class);
        my_aPi.login(phone,pwd)
               .flatMap(new Function<Shang_Bean<User_Bean>, ObservableSource<Shang_Bean>>() {
                   @Override
                   public ObservableSource<Shang_Bean> apply(@NonNull Shang_Bean<User_Bean> Shang_bean) throws Exception {
                       if(Shang_bean!=null){
                               User_Bean data =  Shang_bean.getData();
                           if(data!=null){
                               RequestBody uid = RequestBody.create(MediaType.parse("multipart/form-data"), data.getUid());
                               //TOKEN
                               RequestBody token = RequestBody.create(MediaType.parse("multipart/form-data"), data.getToken());
                               RequestBody requestImgFile = RequestBody.create(MediaType.parse("multipart/form-data"), file);
                               // 创建MultipartBody.Part,用于封装文件数据
                               MultipartBody.Part requestImgPart =
                                       MultipartBody.Part.createFormData("file", file.getName(), requestImgFile);
                               return RetrofitHelper.getRetrofit(My_Url.SHANG).create(My_APi.class).getShang(uid,requestImgPart);
                           }
                       }
                       return Observable.empty();
                   }
               })
               .subscribeOn(Schedulers.io())
               .observeOn(AndroidSchedulers.mainThread())
                .subscribe(new Consumer<Shang_Bean>() {
                    @Override
                    public void accept(Shang_Bean shang_bean) throws Exception {
                           shang_view.onSuccess(shang_bean.getMsg());
                    }
                });
    }
}


//CommonParamsInterceptor
public class CommonParamsInterceptor implements Interceptor {
    @Override
    public Response intercept(Chain chain) throws IOException {
        Request request = chain.request();
        HttpUrl httpUrl = request
                .url()
                .newBuilder()
                .addQueryParameter("source", "android")
                .build();
        Request requestNew = request
                .newBuilder()
                .url(httpUrl)
                .build();
        return chain.proceed(requestNew);
    }
}


//My_APi
public interface My_APi {
    //需要用户登录获得token值的时候需要登录
    @FormUrlEncoded
    @POST("user/login")
    Observable<Shang_Bean<User_Bean>> login(@Field("mobile") String mobile,
                                            @Field("password") String password);
    @Multipart
    @POST("file/upload")
    Observable<Shang_Bean> getShang(@Part("uid") RequestBody uid, @Part MultipartBody.Part img_part);
}

//RetrofitHelper
public class RetrofitHelper {
    public static Retrofit retrofit;
    public static Retrofit getRetrofit(String url) {
        if (retrofit == null) {
            synchronized (RetrofitHelper.class) {
                if (retrofit == null) {
                    OkHttpClient client = new OkHttpClient.Builder()
                            .addInterceptor(new CommonParamsInterceptor())
                            .build();
                    retrofit = new Retrofit.Builder()
                            .baseUrl(url)
                            .client(client)
                            .addConverterFactory(GsonConverterFactory.create())
                            .addCallAdapterFactory(RxJava2CallAdapterFactory.create())
                            .build();
                }
            }
        }
        return retrofit;
    }
}


//Main

public class MainActivity extends AppCompatActivity implements Shang_View{
   private String path;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        path = Environment.getExternalStorageDirectory() + "/head.jpg";
    }
    //BUtton点击事件
    /**
     * 相机拍照
     *
     * @param view
     */ public void camera_pic(View view) {
        // 这个出捕获图片的常量值
        Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
        // 设置图片输出位置; 输出到制定的uri路径上;
        intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(new File(path)));
        // 设置请求码
        startActivityForResult(intent, 100);

    }
    /**
     * 相册选取照片
     *
     * @param view
     */
    public void picCollection_pic(View view) {
        Intent intent = new Intent(Intent.ACTION_PICK);
        intent.setType("image/*");
        startActivityForResult(intent, 101);
    }
    //Intent回调
    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        //照相机
        if (requestCode == 100 && resultCode == RESULT_OK) {
            crop(Uri.fromFile(new File(path)));
            //从相册直接选取照片回调
        } else if (requestCode == 101 && resultCode == RESULT_OK) {
            Uri uri = data.getData();
            crop(uri);
            //剪切回调
        } else if (requestCode == 102 && resultCode == RESULT_OK) {
            //这个参数data,是固定写法
            Bitmap bitmap = data.getParcelableExtra("data");
            Uri uri = Uri.parse(MediaStore.Images.Media.insertImage(getContentResolver(), bitmap, null,null));
            //uri类型装换为String
            String realPathFromURI = getRealPathFromURI(uri);
            //再变为file类型
            File file = new File(realPathFromURI);
            Shang_Model shang_model = new Shang_Model();
            shang_model.loginUpload("13552663511", "123456", file,this);
        }
    }
    /**
     * 剪裁是系统提供的一个应用,我们需要用intent
     *
     * @param uri
     */
    public void crop(Uri uri) {
        // 隐式启动, 里面传的是action
        Intent intent = new Intent("com.android.camera.action.CROP");
        intent.setDataAndType(uri, "image/*");
        intent.putExtra("crop", "true");
        // 裁剪框的比例,1:1
        intent.putExtra("aspectX", 1);
        intent.putExtra("aspectY", 1);
        // 裁剪后输出图片的尺寸大小
        intent.putExtra("outputX", 250);
        intent.putExtra("outputY", 250);
        intent.putExtra("outputFormat", "JPEG");// 图片格式
        intent.putExtra("noFaceDetection", false);// 取消人脸识别
        // 设置剪裁后是否返回数据
        intent.putExtra("return-data", true);
        // 开启一个带有返回值的Activity,请求码为PHOTO_REQUEST_CUT
        startActivityForResult(intent, 102);
    }
    //传入图片uri地址变为String
    private String getRealPathFromURI(Uri contentUri) {
        String[] proj = { MediaStore.Images.Media.DATA };
        CursorLoader loader = new CursorLoader(MainActivity.this, contentUri, proj, null, null, null);
        Cursor cursor = loader.loadInBackground();
        int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
        cursor.moveToFirst();
        return cursor.getString(column_index);
    }
    @Override
    public void onSuccess(String msg) {
        Toast.makeText(MainActivity.this,msg,Toast.LENGTH_SHORT).show();
    }
}
//Main布局文件
<LinearLayout
    android:orientation="vertical"
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="wld.bawei.com.myshangchuangtouxiang.MainActivity">
<Button
    android:text="拍照"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:onClick="camera_pic"
    />
<TextView
    android:text="选取"
    android:onClick="picCollection_pic"
    android:layout_width="match_parent"
    android:layout_height="wrap_content" />
</LinearLayout>




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值