//用户上传头像
@POST(UrlUtil.MODIFY_HEAD_PIC)
@Multipart
Observable<HeadPicBean> headPic(@Part MultipartBody.Part image, @Header(\"userId\")int userId, @Header(\"sessionId\")String sessionId);
MVP
CallBack
package com.jia.dimensions_of_electricity.mine.myprofile.headpic;
public interface HeadPicCallBack<T> {
void onHeadPicCallBackSuccess(HeadPicBean headPicBean);
void onHeadPicCallBackFailure(String msg);
}
View
package com.jia.dimensions_of_electricity.mine.myprofile.headpic;
public interface HeadPicView {
void onHeadPicViewSuccess(HeadPicBean headPicBean);
void onHeadPicViewFailure(String msg);
}
Model
package com.jia.dimensions_of_electricity.mine.myprofile.headpic;
import com.jia.dimensions_of_electricity.net.RetrofitApi;
import com.jia.dimensions_of_electricity.net.RetrofitService;
import com.jia.dimensions_of_electricity.util.SpUtil;
import java.io.File;
import okhttp3.MediaType;
import okhttp3.MultipartBody;
import okhttp3.RequestBody;
import rx.Observable;
import rx.Observer;
import rx.android.schedulers.AndroidSchedulers;
import rx.schedulers.Schedulers;
public class HeadPicModel {
public void headPic(File image, final HeadPicCallBack headPicCallBack){
int userId = SpUtil.getInt(\"userId\", -1);
String sessionId = SpUtil.getString(\"sessionId\", \"\");
RetrofitService retrofitService = RetrofitApi.getInstance().creatApi(RetrofitService.class);
//设置Content-Type:multipart/form-data
RequestBody requestFile =RequestBody.create(MediaType.parse(\"multipart/form-data\"), image);
//设置Content-Disposition:form-data; name=\"photo\"; filename=\"xuezhiqian.png\"
MultipartBody.Part body = MultipartBody.Part.createFormData(\"image\", image.getName(), requestFile);
Observable<HeadPicBean> headPicBeanObservable = retrofitService.headPic(body, userId, sessionId);
headPicBeanObservable.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Observer<HeadPicBean>() {
@Override
public void onCompleted() {
}
@Override
public void (Throwable e) {
e.printStackTrace();
headPicCallBack.onHeadPicCallBackFailure(e.getMessage());
}
@Override
public void onNext(HeadPicBean headPicBean) {
headPicCallBack.onHeadPicCallBackSuccess(headPicBean);
}
});
}
}
Presenter
package com.jia.dimensions_of_electricity.mine.myprofile.headpic;
import java.io.File;
public class HeadPicPresenter {
private HeadPicView headPicView;
private final HeadPicModel headPicModel;
public HeadPicPresenter(HeadPicView headPicView) {
this.headPicView = headPicView;
headPicModel = new HeadPicModel();
}
public void headPic(File image){
headPicModel.headPic(image, new HeadPicCallBack() {
@Override
public void onHeadPicCallBackSuccess(HeadPicBean headPicBean) {
headPicView.onHeadPicViewSuccess(headPicBean);
}
@Override
public void onHeadPicCallBackFailure(String msg) {
headPicView.onHeadPicViewFailure(msg);
}
});
}
}
Bean
package com.jia.dimensions_of_electricity.mine.myprofile.headpic;
public class HeadPicBean {
/**
* headPath : http://172.17.8.100/images/small/head_pic/2018-12-14/20181214160215.jpg
* message : 上传成功
* status : 0000
*/
private String headPath;
private String message;
private String status;
public String getHeadPath() {
return headPath;
}
public void setHeadPath(String headPath) {
this.headPath = headPath;
}
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
public String getStatus() {
return status;
}
public void setStatus(String status) {
this.status = status;
}
}
Activity
package com.jia.dimensions_of_electricity.mine.myprofile;
import android.content.Intent;
import android.content.SharedPreferences;
import android.net.Uri;
import android.os.Build;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.annotation.RequiresApi;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.TextView;
import android.widget.Toast;
import com.facebook.drawee.view.SimpleDraweeView;
import com.jia.dimensions_of_electricity.App;
import com.jia.dimensions_of_electricity.R;
import com.jia.dimensions_of_electricity.mine.myprofile.headpic.HeadPicBean;
import com.jia.dimensions_of_electricity.mine.myprofile.headpic.HeadPicPresenter;
import com.jia.dimensions_of_electricity.mine.myprofile.headpic.HeadPicView;
import com.jia.dimensions_of_electricity.mine.myprofile.userInformation.UserInformationBean;
import com.jia.dimensions_of_electricity.mine.myprofile.userInformation.UserInformationPresenter;
import com.jia.dimensions_of_electricity.mine.myprofile.userInformation.UserInformationView;
import com.jia.dimensions_of_electricity.mine.myprofile.usernick.UserNickActivity;
import com.jia.dimensions_of_electricity.mine.myprofile.userpwd.EventBean;
import com.jia.dimensions_of_electricity.mine.myprofile.userpwd.UserPwdActivity;
import com.jia.dimensions_of_electricity.util.Constant;
import com.jia.dimensions_of_electricity.util.ImageUtil;
import org.greenrobot.eventbus.EventBus;
import org.greenrobot.eventbus.Subscribe;
import org.greenrobot.eventbus.ThreadMode;
import java.io.File;
import butterknife.BindView;
import butterknife.ButterKnife;
import butterknife. ;
public class MyProfileActivity extends AppCompatActivity implements HeadPicView, UserInformationView {
@BindView(R.id.my_image)
SimpleDraweeView myImage;
@BindView(R.id.my_nickName)
TextView myNickName;
@BindView(R.id.my_pwd)
TextView myPwd;
private HeadPicPresenter headPicPresenter;
private UserInformationPresenter userInformationPresenter;
private Uri uri;
private String path;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_my_profile);
ButterKnife.bind(this);
EventBus.getDefault().register(this);
SharedPreferences sp = App.mContext.getSharedPreferences(Constant.SP_NAME, App.mContext.MODE_PRIVATE);
SharedPreferences sp1 = App.mContext.getSharedPreferences(\"login\", App.mContext.MODE_PRIVATE);
String nickName = sp.getString(\"nickName\", \"\");
String headPic = sp.getString(\"headPic\", \"\");
String password = sp1.getString(\"pwd\", \"\");
myImage.setImageURI(headPic);
myNickName.setText(nickName);
myPwd.setText(password);
userInformationPresenter = new UserInformationPresenter(this);
userInformationPresenter.userInformation();
}
@ ({R.id.my_image, R.id.my_nickName, R.id.my_pwd})
public void onViewClicked(View view) {
switch (view.getId()) {
case R.id.my_image:
Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
intent.setType(\"image/*\");
startActivityForResult(intent, 2);
break;
case R.id.my_nickName:
startActivity(new Intent(MyProfileActivity.this, UserNickActivity.class));
break;
case R.id.my_pwd:
Intent intent1 = new Intent(MyProfileActivity.this, UserPwdActivity.class);
startActivity(intent1);
break;
}
}
@RequiresApi(api = Build.VERSION_CODES.KITKAT)
@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
super.onActivityResult(requestCode, resultCode, data);
switch (requestCode) {
case 2:
uri = data.getData();
//bitmap = (Bitmap) data.getExtras().get(\"data\");
String path = ImageUtil.getPath(this, uri);
// myImage.setImageURI(path);
headPicPresenter = new HeadPicPresenter(this);
headPicPresenter.headPic(new File(path));
break;
}
}
@Subscribe(threadMode = ThreadMode.MAIN)
public void event(String upd_name) {
myNickName.setText(upd_name);
}
@Subscribe(threadMode = ThreadMode.MAIN)
public void eventPwd(EventBean bean) {
myPwd.setText(bean.getPassword());
}
@Override
protected void onDestroy() {
super.onDestroy();
EventBus.getDefault().unregister(this);
}
@Override
public void onHeadPicViewSuccess(HeadPicBean headPicBean) {
String headPath = headPicBean.getHeadPath();
myImage.setImageURI(headPath);
EventBus.getDefault().post(headPath);
Toast.makeText(this, \"成功\", Toast.LENGTH_SHORT).show();
}
@Override
public void onHeadPicViewFailure(String msg) {
Toast.makeText(this, \"失败\", Toast.LENGTH_SHORT).show();
}
@Override
public void onUserInformationViewSuccess(UserInformationBean userInformationBean) {
}
@Override
public void onUserInformationViewFailure(String msg) {
}
}
继续阅读与本文标签相同的文章
-
阿里云服务器通用网络增强型实例sn2ne 独享主机速度快 适合企业公司使用
2026-05-18栏目: 教程
-
flex布局和grid布局
2026-05-18栏目: 教程
-
语音顶会Interspeech 论文解读|Constrained output embeddings for end-to-end code-switching speech recognition with only monolingual data
2026-05-18栏目: 教程
-
《Android应用开发进阶》| 每日读本书
2026-05-18栏目: 教程
-
“阿里云十年,因为有我而不同”,征文活动开始了!
2026-05-18栏目: 教程
