上传文件
@Multipart
@POST
Observable post(@Url String url, @QueryMap Map<String, Object> map, @Part MultipartBody.Part file);
RetrofitUtils
public void post(String url, Map<String, Object> map, MultipartBody.Part body, final HttpListener listener) {
Observer observer = new Observer() {
@Override
public void onCompleted() {
}
@Override
public void onError(Throwable e) {
if (listener != null) {
listener.setError(e.getMessage());
}
}
@Override
public void onNext(ResponseBody responseBody) {
if (listener != null) {
try {
listener.setSuccess(responseBody.string());
} catch (IOException e) {
e.printStackTrace();
}
}
}
};
myApiService.post(url, map, body)
.subscribeOn(Schedulers.io())//发射(IO就是)子线程
.observeOn(AndroidSchedulers.mainThread())//运行主线程
.subscribe(observer);
}
model层
@Override
public void post(String url, Map<String, Object> map, final Class clazz, MultipartBody.Part body, final MyCallBack callBack) {
RetrofitUtils.getInstance().post(url, map, body, new RetrofitUtils.HttpListener() {
@Override
public void setSuccess(String jsonStr) {
Gson gson = new Gson();
Object o = gson.fromJson(jsonStr, clazz);
callBack.setSuceess(o);
}
@Override
public void setError(String error) {
}
});
}
presenter层
@Override
public void postRequest(String url, Map<String, Object> map,MultipartBody.Part body, Class clazz) {
modelImpls.post(url, map, clazz, body, new MyCallBack() {
@Override
public void setSuceess(Object suceess) {
iView.Success(suceess);
}
@Override
public void setError(Object error) {
iView.Error(error);
}
});
}
pop弹框
private void setLinstener() {
View view = View.inflate(getActivity(), R.layout.pop, null);
pop = new PopupWindow(view, ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT, true);
pop.setBackgroundDrawable(new ColorDrawable(Color.WHITE));
pop.showAtLocation(view, Gravity.BOTTOM, 0, 0);
TextView paizhao = (TextView) view.findViewById(R.id.paizhao);
TextView xiangce = (TextView) view.findViewById(R.id.xiangce);
TextView cancel = (TextView) view.findViewById(R.id.cancel);
//拍照
paizhao.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
intent.addCategory(“android.intent.category.DEFAULT”);
startActivityForResult(intent, 1000);
pop.dismiss();
}
});
//相册
xiangce.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(Intent.ACTION_PICK);
intent.setType(“image/*”);
startActivityForResult(intent, 2000);
pop.dismiss();
}
});
//取消
cancel.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
pop.dismiss();
}
});
}
pop的xml文件
<TextView
android:id="@+id/xiangce"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="相册"
android:gravity="center"
android:layout_marginTop="10dp"/>
<TextView
android:id="@+id/cancel"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="取消"
android:gravity="center"
android:layout_marginTop="10dp"
android:layout_marginBottom="30dp"/>
返回的图片
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
// TODO Auto-generated method stub
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == 1000) {//拍照
Bitmap bitmap = data.getParcelableExtra(“data”);
Uri uri = Uri.parse(MediaStore.Images.Media.insertImage(getActivity().getContentResolver(), bitmap, null,null));
wodeImgs.setImageURI(uri);
String[] filePathColumn = {MediaStore.Images.Media.DATA};
Cursor cursor = getActivity().getContentResolver().query(uri,
filePathColumn, null, null, null);
cursor.moveToFirst();
int columnIndex = cursor.getColumnIndex(filePathColumn[0]);
//picturePath就是图片在储存卡所在的位置
String picturePath = cursor.getString(columnIndex);
cursor.close();
File file = new File(picturePath);
RequestBody requestBody1 = RequestBody.create(MediaType.parse("image/*"), file);
MultipartBody.Part part = MultipartBody.Part.createFormData("file", file.getName(), requestBody1);
maps.put("uid", 23807);
presenterImpls.postRequest(Contacts.FILE_UPLOAD_URL, maps, part, Header.class);
}
if (requestCode == 2000) {//相册
Uri uri = data.getData();
wodeImgs.setImageURI(uri);
String[] filePathColumn = {MediaStore.Images.Media.DATA};
Cursor cursor = getActivity().getContentResolver().query(uri,
filePathColumn, null, null, null);
cursor.moveToFirst();
int columnIndex = cursor.getColumnIndex(filePathColumn[0]);
//picturePath就是图片在储存卡所在的位置
String picturePath = cursor.getString(columnIndex);
cursor.close();
File file = new File(picturePath);
RequestBody requestBody1 = RequestBody.create(MediaType.parse("image/*"), file);
MultipartBody.Part part = MultipartBody.Part.createFormData("file", file.getName(), requestBody1);
maps.put("uid", 23807);
presenterImpls.postRequest(Contacts.FILE_UPLOAD_URL, maps, part, Header.class);
}
}
成功回调
先查询个人信息得到图片集合,在判断是否上传成功
public void Success(Object daa) {
if (daa instanceof MessageBean) {
MessageBean messageBean = (MessageBean) daa;
String icon = messageBean.getData().getIcon();
String[] split = icon.split("\|");
if(split.length>0){
String replace = split[0].replace(“https”, “http”);//图片
Uri parse = Uri.parse(replace);
Glide.with(getActivity()).load(replace).into(wodeImgs);
}
}
if (daa instanceof Header) {
Header header = (Header) daa;
Log.e("aaas", header.getMsg());
}
}
详解
public class WoDeFragment extends Fragment implements IView {
@BindView(R.id.wode_imgs)
ImageView wodeImgs;
@BindView(R.id.wode_name)
TextView wodeName;
@BindView(R.id.wode_ni_name)
TextView wodeNiName;
Unbinder unbinder;
private View v;
private PopupWindow pop;
private Map<String, Object> maps = new HashMap<>();
private Map<String, Object> map = new HashMap<>();
private PresenterImpls presenterImpls;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
v = inflater.inflate(R.layout.fragment_wo_de, container, false);
unbinder = ButterKnife.bind(this, v);
presenterImpls = new PresenterImpls(this);
map.put("uid", 23807);
presenterImpls.getRequest(Contacts.USER_INFO, map, MessageBean.class);
return v;
}
private void setLinstener() {
View view = View.inflate(getActivity(), R.layout.pop, null);
pop = new PopupWindow(view, ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT, true);
pop.setBackgroundDrawable(new ColorDrawable(Color.WHITE));
pop.showAtLocation(view, Gravity.BOTTOM, 0, 0);
TextView paizhao = (TextView) view.findViewById(R.id.paizhao);
TextView xiangce = (TextView) view.findViewById(R.id.xiangce);
TextView cancel = (TextView) view.findViewById(R.id.cancel);
//拍照
paizhao.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
intent.addCategory("android.intent.category.DEFAULT");
startActivityForResult(intent, 1000);
pop.dismiss();
}
});
//相册
xiangce.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(Intent.ACTION_PICK);
intent.setType("image/*");
startActivityForResult(intent, 2000);
pop.dismiss();
}
});
//取消
cancel.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
pop.dismiss();
}
});
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
// TODO Auto-generated method stub
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == 1000) {//拍照
Bitmap bitmap = data.getParcelableExtra("data");
Uri uri = Uri.parse(MediaStore.Images.Media.insertImage(getActivity().getContentResolver(), bitmap, null,null));
wodeImgs.setImageURI(uri);
String[] filePathColumn = {MediaStore.Images.Media.DATA};
Cursor cursor = getActivity().getContentResolver().query(uri,
filePathColumn, null, null, null);
cursor.moveToFirst();
int columnIndex = cursor.getColumnIndex(filePathColumn[0]);
//picturePath就是图片在储存卡所在的位置
String picturePath = cursor.getString(columnIndex);
cursor.close();
File file = new File(picturePath);
RequestBody requestBody1 = RequestBody.create(MediaType.parse("image/*"), file);
MultipartBody.Part part = MultipartBody.Part.createFormData("file", file.getName(), requestBody1);
maps.put("uid", 23807);
presenterImpls.postRequest(Contacts.FILE_UPLOAD_URL, maps, part, Header.class);
}
if (requestCode == 2000) {//相册
Uri uri = data.getData();
wodeImgs.setImageURI(uri);
String[] filePathColumn = {MediaStore.Images.Media.DATA};
Cursor cursor = getActivity().getContentResolver().query(uri,
filePathColumn, null, null, null);
cursor.moveToFirst();
int columnIndex = cursor.getColumnIndex(filePathColumn[0]);
//picturePath就是图片在储存卡所在的位置
String picturePath = cursor.getString(columnIndex);
cursor.close();
File file = new File(picturePath);
RequestBody requestBody1 = RequestBody.create(MediaType.parse("image/*"), file);
MultipartBody.Part part = MultipartBody.Part.createFormData("file", file.getName(), requestBody1);
maps.put("uid", 23807);
presenterImpls.postRequest(Contacts.FILE_UPLOAD_URL, maps, part, Header.class);
}
}
@Override
public void onDestroyView() {
super.onDestroyView();
unbinder.unbind();
}
@Override
public void Success(Object daa) {
if (daa instanceof MessageBean) {
MessageBean messageBean = (MessageBean) daa;
String icon = messageBean.getData().getIcon();
String[] split = icon.split("\\|");
if(split.length>0){
String replace = split[0].replace("https", "http");//图片
Uri parse = Uri.parse(replace);
Glide.with(getActivity()).load(replace).into(wodeImgs);
}
}
if (daa instanceof Header) {
Header header = (Header) daa;
Log.e("aaas", header.getMsg());
}
}
@Override
public void Error(Object err) {
}
@OnClick(R.id.wode_imgs)
public void onViewClicked(View v) {
switch (v.getId()) {
case R.id.wode_imgs:
setLinstener();
break;
}
}
}