Main
public class MainActivity extends BaseActivity<MainPresenter> implements MainContract.View {
@BindView(R.id.btn)
Button btn;
@BindView(R.id.tv)
TextView tv;
@BindView(R.id.btn02)
Button btn02;
private TimePickerView pickerView;
private PopupWindow popupWindow;
private TextView camera;
private TextView pick;
private TextView cancel;
/**********************************************************************************
private String path = Environment.getExternalStorageDirectory() + "/photo.png";
@Override
public void setupActivityComponent(@NonNull AppComponent appComponent) {
DaggerMainComponent //如找不到该类,请编译一下项目
.builder()
.appComponent(appComponent)
.mainModule(new MainModule(this))
.build()
.inject(this);
}
@Override
public int initView(@Nullable Bundle savedInstanceState) {
return R.layout.activity_main; //如果你不需要框架帮你设置 setContentView(id) 需要自行设置,请返回 0
}
@Override
public void initData(@Nullable Bundle savedInstanceState) {
//动态添加权限
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
requestPermissions(new String[]{Manifest.permission.CAMERA}, 0);
}
pickerView = new TimePickerBuilder(this, new OnTimeSelectListener() {
@Override
public void onTimeSelect(Date date, View v) {
tv.setText(getTime(date));
}
}).build();
View inflate = View.inflate(this, R.layout.layout_pop, null);
popupWindow = new PopupWindow(inflate, ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT);
popupWindow.setOutsideTouchable(true);
camera = inflate.findViewById(R.id.tv_camera_popup);
pick = inflate.findViewById(R.id.tv_pick_popup);
cancel = inflate.findViewById(R.id.tv_cancel_popup);
//相机
camera.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//打开相机
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
//将图片放到SD card
intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(new File(path)));
startActivityForResult(intent, 888);
popupWindow.dismiss();
}
});
//相册
pick.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//打开相册
Intent intent = new Intent(Intent.ACTION_PICK);
//设置图片格式
intent.setType("image/*");
startActivityForResult(intent, 999);
popupWindow.dismiss();
}
});
//取消
cancel.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
popupWindow.dismiss();
}
});
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == 999 && resultCode == MainActivity.RESULT_OK) {
Uri uri = data.getData();
crop(uri);//这个方法在下面
}
else if (requestCode == 888 && resultCode == MainActivity.RESULT_OK) {
Uri uri = Uri.fromFile(new File(path));
crop(uri);
}
else if (requestCode == 1000 && resultCode == MainActivity.RESULT_OK) {
//传到自己的控件上
//Bitmap bitmap = data.getParcelableExtra("data");
//imageView.setImageBitmap(bitmap);
//上传到网络
Uri uri = Uri.fromFile(new File(path));
// ChangeFileFormat 是一个类 看另一篇博客 自己去复制吧 联系我也可以 我给你发文件
File file1 = ChangeFileFormat.getFileByUri(uri, this);
//RequestBody封装了文件和文件的类型
RequestBody requestBody = RequestBody.create(MediaType.parse("image/*"), file1);
// MultipartBody.Part封装了接受的key和文件名字和RequestBody
MultipartBody.Part part = MultipartBody.Part.createFormData("file",file1.getName(), requestBody);
//调P层
mPresenter.getData(part);
}
}
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", 300);
intent.putExtra("outputY", 300);
intent.putExtra("return-data", true);
startActivityForResult(intent, 1000);
}
@OnClick({R.id.btn, R.id.btn02})
public void onViewClicked(View view) {
switch (view.getId()) {
case R.id.btn02:
popupWindow.showAtLocation(btn, Gravity.BOTTOM, 0, 0);
break;
}
}
@Override
public void responseMsg(bean bean) {
String msg = bean.getMsg();
Toast.makeText(this, msg, Toast.LENGTH_SHORT).show();
}
}
@Multipart
@POST("file/upload")
Observable<bean> uploadPhoto(@Query("uid") String uid, @Part MultipartBody.Part part)
P层
public void getData(MultipartBody.Part part){
Observable<bean> observable = mModel.requestData(part);
observable.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Consumer<bean>() {
@Override
public void accept(bean bean) throws Exception {
mRootView.responseMsg(bean);
}
});
}
m层
InfoService infoService = mRepositoryManager.obtainRetrofitService(InfoService.class);
Observable<bean> beanObservable = infoService.uploadPhoto("20473", data);
return beanObservable;