权限
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.INTERNET"/>
ok+retorfit
public class OkHttp {
public Api api;
private OkHttp(){
OkHttpClient builder = new OkHttpClient.Builder()
.writeTimeout(3000,TimeUnit.SECONDS)
.connectTimeout(3000,TimeUnit.SECONDS)
.readTimeout(3000,TimeUnit.SECONDS)
//.addInterceptor(new HeadIntertor())
.build();
Retrofit retrofit = new Retrofit.Builder()
.addCallAdapterFactory(RxJava2CallAdapterFactory.create())
.addConverterFactory(GsonConverterFactory.create())
.baseUrl("http://172.17.8.100/")
.client(builder)
.build();
api = retrofit.create(Api.class);
}
public static OkHttp getInstance() {
return http.OK_HTTP;
}
public static class http{
public static final OkHttp OK_HTTP=new OkHttp();
}
api管理
public interface Api {
@Multipart
@POST("small/user/verify/v1/modifyHeadPic")
Observable<TouEntity>getTou(@Header("userId")String userId, @Header("sessionId")String sessionId, @Part MultipartBody.Part filePart);
}
mainactivityoncreate方法
public class MainActivity extends AppCompatActivity implements IView {
@BindView(R.id.img)
ImageView img;
private Presenter presenter;
private String userId ="228";
private String sessionId="1557024340090228";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ButterKnife.bind(this);
presenter = new Presenter();
presenter.setView(this);
//presenter.getTou(userId,sessionId,image);
img.setOnClickListener(new View.OnClickListener() {
private AlertDialog.Builder builder;
@Override
public void onClick(View v) {
builder = new AlertDialog.Builder(MainActivity.this);
builder.setMessage("上传头像");
builder.setPositiveButton("相册", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
// Intent.ACTION_PICK 这个对应的就是图库
Intent intent1 = new Intent(Intent.ACTION_PICK);
// 第四步:设置显式MIME数据类型
intent1.setType("image/*");
// 第五步:跳转回
startActivityForResult(intent1, 2);
}
});
builder.setNegativeButton("相机", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
//权限 是否调用摄像头 这个权限在模拟器上运行需要改动版本
Intent intent = new Intent();
// 指定开启系统相机的Action
intent.setAction(MediaStore.ACTION_IMAGE_CAPTURE);
intent.addCategory(Intent.CATEGORY_DEFAULT);
startActivityForResult(intent, 1);
}
});
builder.show();
}
});
}
mainactivity创建onActivityResult结果处理
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
super.onActivityResult(requestCode, resultCode, data);
//相册
if (requestCode == 2) {
Uri uri = data.getData();
img.setImageURI(uri);
//uri转换成file文件
String[] arr = {MediaStore.Images.Media.DATA};
Cursor cursor = managedQuery(uri,arr,null,null,null);
int img_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
cursor.moveToFirst();
String img_path = cursor.getString(img_index);
File file = new File(img_path);
if(file!=null && file.exists()){
RequestBody requestBody = RequestBody.create(MediaType.parse("image/*"),file.getAbsoluteFile());
MultipartBody.Part part = MultipartBody.Part.createFormData("image",file.getName(),requestBody);
presenter.getTou(userId,sessionId,part);
}else{
Toast.makeText(MainActivity.this,"请选择文件",Toast.LENGTH_SHORT).show();
}
}
//相机
if(requestCode == 1){
Bundle bundle = data.getExtras();
Bitmap bitmap = (Bitmap)bundle.get("data");
img.setImageBitmap(bitmap);
File file = new File("storage/emulated/legacy/s.jpg");//将要保存图片的路径
try {
BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(file));
bitmap.compress(Bitmap.CompressFormat.JPEG, 100, bos);
RequestBody requestBody = RequestBody.create(MediaType.parse("image/*"),file.getAbsoluteFile());
MultipartBody.Part part = MultipartBody.Part.createFormData("image",file.getName(),requestBody);
presenter.getTou(userId,sessionId,part);
bos.flush();
bos.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
mainactivity成功失败处理
public void Success(Object o, int isWhat) {
if(isWhat==1){
TouEntity touEntity = (TouEntity) o;
String message = touEntity.getMessage();
Toast.makeText(MainActivity.this,message,Toast.LENGTH_SHORT).show();
}
}
@Override
public void False(String mess) {
}