android 剪切並上傳圖片

public interface HttpService {
    //上傳文件
    @Multipart
    @POST
    Observable<ResponseBody> uploadPic(@Url String url, @HeaderMap Map<String, String> headMap, @Part MultipartBody.Part part);

}

public class HttpUtils {
    private String baseUrl = "http://mobile.bwstudent.com";

    //上傳
    public HttpUtils updatePic(String url, Map<String,String> headMap, File file){
        Retrofit retrofit=new Retrofit.Builder().addCallAdapterFactory(RxJava2CallAdapterFactory.create())
                .baseUrl(baseUrl).build();
        HttpService httpService = retrofit.create(HttpService.class);


        MediaType mediaType=MediaType.parse("multipart/form-data;charset=UTF-8");
        RequestBody boby=RequestBody.create(mediaType,file);
        //第一個  是服務端定義的參數
        //第二個  存儲到sd卡文件的名字
        //第一個  requestBody對象
        MultipartBody.Part part=MultipartBody.Part.createFormData("image",file.getName(),boby);
        Observable<ResponseBody> observable = httpService.uploadPic(url, headMap, part);
        observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer<ResponseBody>() {
            @Override
            public void onSubscribe(Disposable d) {

            }

            @Override
            public void onNext(ResponseBody responseBody) {
                try {
                    setCallBack.success(responseBody.string());
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }

            @Override
            public void onError(Throwable e) {
                setCallBack.fail(e.getMessage());
            }

            @Override
            public void onComplete() {

            }
        });
        return this;
    }
    public void result(SetCallBack setCallBack){
        this.setCallBack=setCallBack;
    }
    SetCallBack setCallBack;
    public interface SetCallBack{
        void success(String data);
        void fail(String error);
    }
}

public class MainActivity extends AppCompatActivity implements View.OnClickListener {


    private Button xj;
    private Button xc;
    private ImageView ImageView1;
    private ImageView image;
    private Button xiangji,xiangce;
    private String url="/small/user/verify/v1/modifyHeadPic";
    private String path= Environment.getExternalStorageDirectory().getAbsolutePath()+"/img.png";
    private ProgressDialog pd;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        ImageView1 = findViewById(R.id.ImageView1);
        xj =findViewById(R.id.xj);
        xc =findViewById(R.id.xc);

        xj.setOnClickListener(this);
        xc.setOnClickListener(this);

    }

    @Override
    public void onClick(View view) {
        switch (view.getId()){
            case R.id.xj:
                Intent intent=new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
                intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(new File(path)));
                startActivityForResult(intent,100);
                break;
            case R.id.xc:
                Intent intent1=new Intent(Intent.ACTION_PICK);
                intent1.setType("image/*");
                startActivityForResult(intent1,99);
                break;
        }
     }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        //相機
        if (requestCode==100){
            File file = new File(path);
            Bitmap bitmap = BitmapFactory.decodeFile(path);
            ImageView1.setImageBitmap(bitmap);
            //設置上傳進度條
            upload(path);
            upLoad(file);
        }else if (requestCode==99){
            Uri data1 = data.getData();
            String[] pojo={MediaStore.Images.Media.DATA};
            Cursor cursor = managedQuery(data1, pojo, null, null, null);
            if (cursor!=null){
                int columnIndexOrThrow = cursor.getColumnIndexOrThrow(pojo[0]);
                cursor.moveToFirst();
                String picPath = cursor.getString(columnIndexOrThrow);
                cursor.close();
                File file = new File(picPath);
                ImageView1.setImageURI(data1);
                //設置上傳進度條
                upload(picPath);
                upLoad(file);
            }
        }
    }

    //上傳頭像
    private void upLoad(File file) {
        Map<String,String> headMap=new HashMap<>();
        headMap.put("userId","1198");
        headMap.put("sessionId","15607612684541198");
        new HttpUtils().updatePic(url,headMap,file).result(new HttpUtils.SetCallBack() {
            @Override
            public void success(String data) {
                Toast.makeText(MainActivity.this,data,Toast.LENGTH_SHORT).show();
                Log.d("aaa",data);
                //隱藏進度條
                pd.hide();
            }

            @Override
            public void fail(String error) {
                Toast.makeText(MainActivity.this,error,Toast.LENGTH_SHORT).show();
                Log.d("aaa",error);
            }
        });
    }

    //上傳圖片
    private void upload(String picPath) {
        pd = new ProgressDialog(this);
        pd.setMessage("正在上傳");
        pd.setCancelable(false);
        pd.show();

    }

}

 <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
`

implementation ‘com.squareup.retrofit2:adapter-rxjava2:2.4.0’
implementation ‘io.reactivex.rxjava2:rxandroid:2.1.0’
implementation ‘com.squareup.okhttp3:okhttp:3.10.0’
implementation ‘com.google.code.gson:gson:2.8.5’


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章