xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".view.activity.MainActivity">
<com.facebook.drawee.view.SimpleDraweeView
android:id="@+id/image_simple"
android:layout_width="200dp"
android:layout_height="200dp"
android:src="@mipmap/ic_launcher" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="200dp"
android:orientation="horizontal">
<Button
android:id="@+id/button_photo"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="相机" />
<Button
android:id="@+id/button_xc"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="相册" />
</LinearLayout>
</LinearLayout>
网络工具类
package luwenjie0428.bw.com.luwenjie0502.model.util;
import java.io.IOException;
import java.util.concurrent.TimeUnit;
import okhttp3.Interceptor;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.Response;
import retrofit2.Retrofit;
import retrofit2.adapter.rxjava2.RxJava2CallAdapterFactory;
import retrofit2.converter.gson.GsonConverterFactory;
/**
* @author:
* @ProjectName: Luwenjie0502
* @Package: luwenjie0428.bw.com.luwenjie0502.model.util
* @ClassName: HttpUtil
* @CreateDate: 2019/5/6 8:45
* @UpdateDate: 2019/5/6 8:45
*/
public class HttpUtil {
public final RetrofitResponse response;
private HttpUtil() {
OkHttpClient okHttpClient = new OkHttpClient.Builder()
.connectTimeout(50, TimeUnit.SECONDS)
.readTimeout(50, TimeUnit.SECONDS)
.addInterceptor(new getInterceptor())
.build();
Retrofit retrofit = new Retrofit.Builder()
.baseUrl("http://172.17.8.100/small/")
.addConverterFactory(GsonConverterFactory.create())
.addCallAdapterFactory(RxJava2CallAdapterFactory.create())
.client(okHttpClient)
.build();
response = retrofit.create(RetrofitResponse.class);
}
public static HttpUtil getInstance() {
return getHttpUtilInstance.httpUtil;
}
private static class getHttpUtilInstance {
private static HttpUtil httpUtil = new HttpUtil();
}
private static class getInterceptor implements Interceptor {
@Override
public Response intercept(Chain chain) throws IOException {
Request request = chain.request();
Request builder = request.newBuilder()
.addHeader("userId", "1026")
.addHeader("sessionId", "15571044946071026")
.build();
return chain.proceed(builder);
}
}
}
拼参
@Multipart
@POST("user/verify/v1/modifyHeadPic")
Observable<ImageBean> getImageData(@Part MultipartBody.Part part);
Activity
package luwenjie0428.bw.com.luwenjie0502.view.activity;
import android.content.Intent;
import android.database.Cursor;
import android.graphics.Bitmap;
import android.net.Uri;
import android.os.Environment;
import android.provider.MediaStore;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;
import com.facebook.drawee.view.SimpleDraweeView;
import java.io.File;
import luwenjie0428.bw.com.luwenjie0502.R;
import luwenjie0428.bw.com.luwenjie0502.model.bean.ImageBean;
import luwenjie0428.bw.com.luwenjie0502.presenter.MainPresenter;
import luwenjie0428.bw.com.luwenjie0502.view.interfaces.MainView;
import okhttp3.MediaType;
import okhttp3.MultipartBody;
import okhttp3.RequestBody;
public class MainActivity extends BaseActivity implements MainView<ImageBean> {
private Button button_photo;
private Button button_xc;
private SimpleDraweeView image_simple;
private MainPresenter mainPresenter;
private File file;
private static final String PHOTO_FILE_MAME = "header_image.jpg";//临时文件名
private String path = Environment.getExternalStorageDirectory() + "/header_image.png";
@Override
protected int bindlayout() {
return R.layout.activity_main;
}
@Override
protected void initView() {
button_photo = findViewById(R.id.button_photo);
button_xc = findViewById(R.id.button_xc);
image_simple = findViewById(R.id.image_simple);
}
@Override
protected void initData() {
mainPresenter = new MainPresenter();
mainPresenter.setView(this);
}
@Override
protected void bindEvent() {
button_photo.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//打开相机
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
if (hasSdcard()) {//判断SD卡是否可用
file = new File(Environment.getExternalStorageDirectory(), PHOTO_FILE_MAME);
//存放到内存中
intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(new File(path)));
}
startActivityForResult(intent, 1);
}
});
button_xc.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(Intent.ACTION_PICK);
intent.setType("image/*");
startActivityForResult(intent, 2);
}
});
}
//裁剪图片
private void crop(Uri uri) {
Intent intent = new Intent("com.android.camera.action.CROP");
intent.setDataAndType(uri, "image/*");
//支持裁剪
intent.putExtra("CROP", true);
//裁剪的比例
intent.putExtra("aspectX", 1);
intent.putExtra("aspectY", 1);
//裁剪后输出图片的尺寸大小
intent.putExtra("outputX", 250);
intent.putExtra("outputY", 250);
//将图片返回给data
intent.putExtra("return-data", true);
startActivityForResult(intent, 3);
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == 1 && resultCode == RESULT_OK) {//相机返回的数据
if (hasSdcard()) {
crop(Uri.fromFile(new File(path)));
} else {
Toast.makeText(MainActivity.this, "未找到存储啦,无法存储照片", Toast.LENGTH_SHORT).show();
}
} else if (requestCode == 2 && resultCode == RESULT_OK) {//相册返回的数据
//得到图片的全路径
if (data != null) {
Uri uri = data.getData();
crop(uri);
}
} else if (requestCode == 3 && resultCode == RESULT_OK) {//剪切回来的照片数据
if (data != null) {
Bitmap bitmap = data.getParcelableExtra("data");
//将bitmap转换为uri
Uri uri = Uri.parse(MediaStore.Images.Media.insertImage(getContentResolver(), bitmap, null, null));
String[] proj = {MediaStore.Images.Media.DATA};
Cursor actualimagecursor = managedQuery(uri, proj, null, null, null);
int actual_image_column_index = actualimagecursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
actualimagecursor.moveToFirst();
String img_path = actualimagecursor.getString(actual_image_column_index);
File file = new File(img_path);
//判断file文件是否存在
if (file != null && file.exists()) {
RequestBody requestBody = RequestBody.create(MediaType.parse("image/*"), file.getAbsoluteFile());
MultipartBody.Part part = MultipartBody.Part.createFormData("image", file.getName(), requestBody);
mainPresenter.getImageBean(part);
} else {
Toast.makeText(MainActivity.this, "请选择文件", Toast.LENGTH_SHORT).show();
}
}
}
}
//判断SD卡是否挂载
public boolean hasSdcard() {
if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {
return true;
} else {
return false;
}
}
@Override
public void onSuccess(ImageBean imageBean) {
if (imageBean.getStatus().equals("0000")) {
Toast.makeText(MainActivity.this, imageBean.getMessage(), Toast.LENGTH_SHORT).show();
String headPath = imageBean.getHeadPath();
image_simple.setImageURI(headPath);
}
}
@Override
public void onErr(String err) {
}
}