点击上传头像

//bean/ Uptou

package com.example.shangchauntouxaing.bean;

/**
 * Created by Administrator on 2018/2/5.
 */

public class Uptou {
    /**
     * msg : 文件格式不正确
     * code : 1
     */
    private String msg;
    private String code;

    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;
    }
}

//bean/User

package com.example.shangchauntouxaing.bean;

/**
 * Created by Administrator on 2018/2/3.
 */

public class User {

    /**
     * msg : 登录成功
     * code : 0
     * data : {"age":null,"appkey":"170ecc756d4ef302","appsecret":"9F7B8559525FCA66256D8CA8702E6588","createtime":"2018-02-03T19:47:53","email":null,"fans":null,"follow":null,"gender":null,"icon":"https://www.zhaoapi.cn/images/1517647988961d.jpg","latitude":null,"longitude":null,"mobile":"13403202452","money":null,"nickname":null,"password":"8F669074CAF5513351A2DE5CC22AC04C","praiseNum":null,"token":"8531A4E38A2E8517D5ACD1FC8DDB083E","uid":10134,"userId":null,"username":"13403202452"}
     */

    private String msg;
    private String code;
    private DataBean 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;
    }

    public DataBean getData() {
        return data;
    }

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

    public static class DataBean {
        /**
         * age : null
         * appkey : 170ecc756d4ef302
         * appsecret : 9F7B8559525FCA66256D8CA8702E6588
         * createtime : 2018-02-03T19:47:53
         * email : null
         * fans : null
         * follow : null
         * gender : null
         * icon : https://www.zhaoapi.cn/images/1517647988961d.jpg
         * latitude : null
         * longitude : null
         * mobile : 13403202452
         * money : null
         * nickname : null
         * password : 8F669074CAF5513351A2DE5CC22AC04C
         * praiseNum : null
         * token : 8531A4E38A2E8517D5ACD1FC8DDB083E
         * uid : 10134
         * userId : null
         * username : 13403202452
         */

        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 Object nickname;
        private String password;
        private Object praiseNum;
        private String token;
        private int 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 Object getNickname() {
            return nickname;
        }

        public void setNickname(Object 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 int getUid() {
            return uid;
        }

        public void setUid(int 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;
        }
    }
}
//modle/Getnetjson
package com.example.shangchauntouxaing.mode;

import com.example.shangchauntouxaing.bean.User;

/**
 * Created by Administrator on 2018/2/3.
 */

public interface Getnetjson {
    void getNtetjson(User user);
}
//model/Imode
package com.example.shangchauntouxaing.mode;

import java.io.File;

/**
 * Created by Administrator on 2018/2/3.
 */

public interface Imode {
    void getjson(Getnetjson getnetjson);
    //修改头像的方法
    void uptouxiang(File f, String id, Uptoulisteneter uptoulisteneter);

}
//modle/Mymode
package com.example.shangchauntouxaing.mode;

import com.example.shangchauntouxaing.bean.Uptou;
import com.example.shangchauntouxaing.bean.User;
import com.example.shangchauntouxaing.util.Getnet;
import com.example.shangchauntouxaing.util.Testservice;
import com.example.shangchauntouxaing.util.Util;

import java.io.File;
import java.util.HashMap;
import java.util.Map;

import io.reactivex.Observable;
import io.reactivex.android.schedulers.AndroidSchedulers;
import io.reactivex.functions.Consumer;
import io.reactivex.schedulers.Schedulers;
import okhttp3.MediaType;
import okhttp3.MultipartBody;
import okhttp3.RequestBody;

/**
 * Created by Administrator on 2018/2/3.
 */

public class Mymode implements Imode {


    @Override
    public void getjson(final Getnetjson getnetjson) {
        Map<String, String> map = new HashMap<>();
        map.put("", "");
        map.put("", "");
        Observable<User> getuser = Util.getmInstance().getnetjson(Getnet.net).getuser(map);
        getuser.subscribeOn(Schedulers.newThread())
                .observeOn(AndroidSchedulers.mainThread())
                .subscribe(new Consumer<User>() {
                    @Override
                    public void accept(User user) throws Exception {
                        getnetjson.getNtetjson(user);
                    }
                });
    }

    @Override
    public void uptouxiang(File f, String id, final Uptoulisteneter uptoulisteneter) {
        Testservice testservice = Util.getmInstance().getnetjson(Getnet.genghuan);
        RequestBody uidBody = RequestBody.create(MediaType.parse("multipart/form-data"), id);
        //f为file路径
        MultipartBody.Part filePart = MultipartBody.Part.createFormData("file", f.getName(), RequestBody.create(
                MediaType.parse("application/octet-stream"), f));

        Observable<Uptou> upload = testservice.upload(uidBody, filePart);
        upload.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread())
                .subscribe(new Consumer<Uptou>() {
                    @Override
                    public void accept(Uptou uptou) throws Exception {
                        uptoulisteneter.uptou(uptou);
                    }
                });
    }


}
//modle/Uptoulisteneter
package com.example.shangchauntouxaing.mode;

import com.example.shangchauntouxaing.bean.Uptou;

/**
 * Created by Administrator on 2018/2/5.
 */

public interface Uptoulisteneter {
    void uptou(Uptou uptou);
}
//p/Ipresenter
package com.example.shangchauntouxaing.presenter;

import com.example.shangchauntouxaing.mode.Imode;
import com.example.shangchauntouxaing.view.Iview;

import java.io.File;

/**
 * Created by Administrator on 2018/2/3.
 */

public interface Ipresenter {
    void getmv(Imode imode, Iview iview);
    void getmv1(File f, String id, Imode imode, Iview iview);

}
//p/Mypresenter
package com.example.shangchauntouxaing.presenter;

import com.example.shangchauntouxaing.bean.Uptou;
import com.example.shangchauntouxaing.bean.User;
import com.example.shangchauntouxaing.mode.Getnetjson;
import com.example.shangchauntouxaing.mode.Imode;
import com.example.shangchauntouxaing.mode.Uptoulisteneter;
import com.example.shangchauntouxaing.view.Iview;

import java.io.File;

/**
 * Created by Administrator on 2018/2/3.
 */

public class Mypresenter implements Ipresenter {
    @Override
    public void getmv(Imode imode, final Iview iview) {
        imode.getjson(new Getnetjson() {
            public String icon;
          @Override
            public void getNtetjson(User user) {
              
                    User.DataBean data = user.getData();
                    if (data!=null) {
                        data.getIcon();
                        iview.gettu(icon);
                    }
            }
        });
    }

    @Override
    public void getmv1(File f, String id, Imode imode, final Iview iview) {
        imode.uptouxiang(f, id, new Uptoulisteneter() {
            @Override
            public void uptou(Uptou uptou) {
                iview.upcheng(uptou);
            }
        });
    }
}
//u/Getnet
package com.example.shangchauntouxaing.util;

/**
 * Created by Administrator on 2018/2/3.
 */

public interface Getnet {
    public String net="http://120.27.23.105/";
    public String genghuan="http://120.27.23.105/";
}
//u/Myapp
package com.example.shangchauntouxaing.util;

import android.app.Application;

import com.facebook.drawee.backends.pipeline.Fresco;

/**
 * Created by Administrator on 2018/2/3.
 */

public class Myapp extends Application {
    @Override
    public void onCreate() {
        super.onCreate();
        Fresco.initialize(this);
    }
}
//u/Testservice
package com.example.shangchauntouxaing.util;

import com.example.shangchauntouxaing.bean.Uptou;
import com.example.shangchauntouxaing.bean.User;

import java.util.Map;

import io.reactivex.Observable;
import okhttp3.MultipartBody;
import okhttp3.RequestBody;
import retrofit2.http.FieldMap;
import retrofit2.http.FormUrlEncoded;
import retrofit2.http.Multipart;
import retrofit2.http.POST;
import retrofit2.http.Part;

/**
 * Created by Administrator on 2018/2/3.
 */

public interface Testservice {

    @POST("user/login")
    @FormUrlEncoded
    Observable<User> getuser(@FieldMap Map<String,String> map);

    //第一种方式上传头像
    @POST("file/upload")
    @Multipart
    Observable<Uptou> upload(@Part("uid") RequestBody uid, @Part MultipartBody.Part file);




}
//u/Util
package com.example.shangchauntouxaing.util;

import retrofit2.Retrofit;
import retrofit2.adapter.rxjava2.RxJava2CallAdapterFactory;
import retrofit2.converter.gson.GsonConverterFactory;

/**
 * Created by Administrator on 2018/2/3.
 */

public class Util {
    private volatile static Util util;
    private Util(){

    }
    public static Util getmInstance(){
        if (util==null){
        synchronized (Util.class){
            if (util==null){
                util=new Util();
            }
        }
        }

        return util;
    }

    public Testservice getnetjson(String uri){
        Retrofit retrofit = new Retrofit.Builder().baseUrl(uri)
                .addConverterFactory(GsonConverterFactory.create())
                .addCallAdapterFactory(RxJava2CallAdapterFactory.create())
                .build();
        Testservice testservice = retrofit.create(Testservice.class);
        return testservice;
    }

}
//view/Iview
package com.example.shangchauntouxaing.view;

import com.example.shangchauntouxaing.bean.Uptou;

/**
 * Created by Administrator on 2018/2/3.
 */

public interface Iview {
    void gettu(String tu);

    //成功失败
    void upcheng(Uptou uptou);
}
//view/MainActivity
package com.example.shangchauntouxaing.view;

import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.drawable.ColorDrawable;
import android.net.Uri;
import android.os.Bundle;
import android.os.Environment;
import android.provider.MediaStore;
import android.support.v7.app.AppCompatActivity;
import android.view.Gravity;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.PopupWindow;

import com.example.shangchauntouxaing.R;
import com.example.shangchauntouxaing.bean.Uptou;
import com.example.shangchauntouxaing.mode.Mymode;
import com.example.shangchauntouxaing.presenter.Mypresenter;
import com.facebook.drawee.view.SimpleDraweeView;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;

public class MainActivity extends AppCompatActivity implements Iview{
    private static String path = "/sdcard/myHead/";// sd路径
    private SimpleDraweeView sd;
    protected  Uri tempUri;
    private File defaltefile;
    private File defaltefile1;
    private Uri uri;
    private File file;
    private String fileName;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        sd = findViewById(R.id.sd);
        Mypresenter mypresenter=new Mypresenter();
        mypresenter.getmv(new Mymode(),this);
        initdata();

    }

    public void initdata() {

        sd.setOnClickListener(new View.OnClickListener() {

            private PopupWindow popupWindow;

            @Override
            public void onClick(View v) {
                View view = View.inflate(MainActivity.this, R.layout.popupwindow, null);
                popupWindow = new PopupWindow(view, ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT);
                popupWindow.setBackgroundDrawable(new ColorDrawable(getResources().getColor(android.R.color.transparent)));
                popupWindow.setOutsideTouchable(true);
                //显示在底部  main为activity_main布局控件中 最大的LinearLayout 的id
                popupWindow.showAtLocation(MainActivity.this.findViewById(R.id.main),
                        Gravity.BOTTOM | Gravity.CENTER_HORIZONTAL, 0, 0);
                    Button bt = view.findViewById(R.id.bt);
                    Button bt1 = view.findViewById(R.id.bt1);
                    Button bt2 = view.findViewById(R.id.bt2);
                    bt.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.jpg")));
                            startActivityForResult(intent2, 2);// 采用ForResult打开
                            popupWindow.dismiss();
                        }
                    });
                bt1.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
                        Intent intent=new Intent(Intent.ACTION_PICK);
                        intent.setType("image/*");
                        startActivityForResult(intent, 1);
                        popupWindow.dismiss();
                    }
                });
                bt2.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
                        popupWindow.dismiss();
                    }
                });
            }
        });

    }

    @Override
    public void gettu(String tu) {

        sd.setImageURI(Uri.parse(tu));
    }

    @Override
    public void upcheng(Uptou uptou) {
        if (uptou.getCode().equals("0")){
            sd.setImageURI(uri);
        }
    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        //图库照片的路径
        if (requestCode==1&&resultCode==RESULT_OK) {
            cropPhoto(data.getData());
        }

        //相机的路径为f File f=new File(Environment.getExternalStorageDirectory(),"ni.jpg");
        if (requestCode==2&&resultCode==RESULT_OK){
            File temp = new File(Environment.getExternalStorageDirectory() + "/head.jpg");
            cropPhoto(Uri.fromFile(temp));// 裁剪图片
        }
        if (requestCode==3&&resultCode==RESULT_OK){
            if (data != null) {
                Bundle extras = data.getExtras();
                Bitmap head = extras.getParcelable("data");
                if (head != null) {
                    setPicToView(head);// 保存在SD卡中
                    uri = Uri.parse(MediaStore.Images.Media.insertImage(getContentResolver(), head, null,null));
                    Mypresenter mypresenter=new Mypresenter();
                    File f=new File(fileName);
                    mypresenter.getmv1(f,"10134",new Mymode(),MainActivity.this);
                }
            }

        }

        super.onActivityResult(requestCode, resultCode, data);

    }


    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);
        startActivityForResult(intent, 3);
    }

    private void setPicToView(Bitmap mBitmap) {
        String sdStatus = Environment.getExternalStorageState();
        if (!sdStatus.equals(Environment.MEDIA_MOUNTED)) { // 检测sd是否可用
            return;
        }
        FileOutputStream b = null;
        file = new File(path);
        file.mkdirs();// 创建文件夹
        // 图片名字
        fileName = path + "head1.jpg";
        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();
            }
        }
    }
}
//activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 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"
    android:orientation="vertical"
    android:id="@+id/main"
    tools:context="com.example.shangchauntouxaing.view.MainActivity">
    <com.facebook.drawee.view.SimpleDraweeView
        android:layout_width="300px"
        android:layout_height="300px"
        app:roundAsCircle="true"
        app:placeholderImage="@drawable/a"
        android:id="@+id/sd"></com.facebook.drawee.view.SimpleDraweeView>

</LinearLayout>
//popupwindow.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    android:orientation="vertical"
    xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent"
    android:layout_height="match_parent">
    <Button
        android:background="#ffffff"
        android:layout_gravity="center_horizontal"
        android:text="拍照"
        android:id="@+id/bt"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />
    <View
        android:layout_width="match_parent"
        android:layout_height="1px"
        android:background="#DFDCD7"></View>

    <Button
        android:background="#ffffff"
    android:layout_gravity="center_horizontal"
    android:text="从相册选取"
    android:id="@+id/bt1"
    android:layout_width="match_parent"
    android:layout_height="wrap_content" />

    <Button
        android:layout_marginTop="20px"
        android:background="#ffffff"
        android:layout_gravity="center_horizontal"
        android:text="取消"
        android:id="@+id/bt2"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />

</LinearLayout>



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值