在Android中进行多部分文件上传的好方法

All*_*ang 1 java multithreading android request androidhttpclient

我正在编写一段代码来执行多部分表单数据POST请求,在我的情况下,只是将图像上传到带有参数的服务器.这就是我现在拥有的:

我有一个触发多部分请求的按钮,在按钮OnClickListener中,我有这个代码来旋转一个新线程:

new Thread(new Runnable(){

@Override
public void run() {

    String photoUri = getPhotoUri();
    String url = getEndPointUrl();

    try {   

    NewPostRequest.postFile(url, photoUri, <Other Params...>);

    } catch (Exception e) {
        // Exception Handling           
    } 
}).start();
Run Code Online (Sandbox Code Playgroud)

而且NewPostRequest.postFile只是使用Apache Http Client发出请求,基本如下:

HttpClient client = new DefaultHttpClient();

HttpPost post = new HttpPost(url);

MultipartEntityBuilder builder = MultipartEntityBuilder.create();    

builder.setMode(HttpMultipartMode.BROWSER_COMPATIBLE);

File file = new File(fileUri);

FileBody fb = new FileBody(file);

builder.addPart("file", fb);

builder.addTextBody("param", otherParam);

HttpEntity entity = builder.build();

post.setEntity(entity);

HttpResponse response = client.execute(post);      
Run Code Online (Sandbox Code Playgroud)

我需要每次都旋转一个新线程,因为最近的Android版本不允许程序在UI线程上发出http请求.但是,我真的反对旋转一个随机线程,让它像上面的代码一样失控.我曾尝试使用Google Volley库,但在上传像image这样的大型数据文件时,它并不是一个很少的工具.

我想知道我应该做些什么来使这个电话更容易管理?

=====更新=====

我切换到使用AsyncTask,它现在可以正常工作.我将保持这个问题,看看是否有任何人有更好的方法.

Anu*_*kur 10

HTTP一直是Android的痛点.幸运的是,我们有许多伟大的库来处理所有困难的部分.

尝试离子.

它允许您在后台线程中轻松执行多部分请求,并在请求完成时让您在主线程上获得回调.

当调用Context超出范围等时,它还会执行其他很酷的功能,如智能缓存,自动请求取消等.

PS:Retrofit是另一个很棒的图书馆,但我更喜欢Ion.只是一个偏好的问题.