改造2图片上传

时间:2018-10-07 09:31:45

标签: android retrofit2

事实上,我正在准备一个Android应用程序,该程序要借助REST API在服务器上上传图像。

我用POSTMAN测试了lapi,没有任何错误。

但是这部分有一个错误:我认为崩溃应用程序在意图之前 这是我的源代码:

 public class FileShooser extends AppCompatActivity {

private static final int INTENT_REQUEST_CODE = 100;
private String name ;

private CompositeSubscription mSubscriptions;
ProgressDialog progressdialog ;

@Override
protected void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);
    mSubscriptions = new CompositeSubscription();

    // get name from last activity
    name= getIntent().getStringExtra("Name");
    // start file shooser intent
    Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
    intent.setType("image/*");

    try {

        startActivityForResult(intent, INTENT_REQUEST_CODE );

    } catch (ActivityNotFoundException e) {
        e.printStackTrace();
    }
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {

    if(requestCode==INTENT_REQUEST_CODE)
    {
            if(resultCode==RESULT_OK){

                uploadImage( data.getData());
            }
    }

}
public byte[] getBytes(InputStream is) throws IOException {
    ByteArrayOutputStream byteBuff = new ByteArrayOutputStream();

    int buffSize = 1024;
    byte[] buff = new byte[buffSize];

    int len = 0;
    while ((len = is.read(buff)) != -1) {
        byteBuff.write(buff, 0, len);
    }

    return byteBuff.toByteArray();
}
private void uploadImage(Uri fileUri) {

    Retrofit retrofit = new Retrofit.Builder()
            .baseUrl(Constants.BASE_URL)
            .addConverterFactory(GsonConverterFactory.create())
            .build();
    RetrofitInterface retrofitInterface = retrofit.create(RetrofitInterface.class);

    // use the FileUtils to get the actual file by uri
    File file = new File(fileUri.getPath());

    showSnackBarMessage("name:"+file.getName());

    // create RequestBody instance from file
    RequestBody requestFile =
            RequestBody.create(
                    MediaType.parse(getContentResolver().getType(fileUri)),
                    file
            );
    // MultipartBody.Part is used to send also the actual file name
    MultipartBody.Part body =
            MultipartBody.Part.createFormData("image", file.getName(), requestFile);

    // progress dialog
    progressdialog = new ProgressDialog(getApplicationContext());
    progressdialog.setMessage("Please wait ...");
    progressdialog.show();

      retrofitInterface.upload(name,body).observeOn(AndroidSchedulers.mainThread())
            .subscribeOn(Schedulers.io())
            .subscribe(this::handleResponse,this::handleError);

}

private void handleError(Throwable error) {
    progressdialog.dismiss();
    if (error instanceof HttpException) {

        Gson gson = new GsonBuilder().create();

        try {

            String errorBody = ((HttpException) error).response().errorBody().string();
            Response response = gson.fromJson(errorBody,Response.class);
            showSnackBarMessage(response.getMessage());
        } catch (IOException e) {
            e.printStackTrace();
        }
    } else {

        showSnackBarMessage("Network Error !");
    }
}

private void handleResponse(Response response) {
    progressdialog.dismiss();
    showSnackBarMessage(response.getMessage());

}

private void showSnackBarMessage(String message) {
    Toast.makeText(getApplicationContext(),message,Toast.LENGTH_LONG).show();
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    return true;
}
 }

非常感谢您的回答

0 个答案:

没有答案