//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>