首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用android-async-http库

如何使用android-async-http库
EN

Stack Overflow用户
提问于 2014-12-02 15:19:13
回答 1查看 565关注 0票数 0

我正在尝试使用android-async-http库将文件异步上传到服务器。回调位于我调用的upload方法中。但是,在尝试从AsyncTask类调用该方法时出现错误。有没有人能发现哪里出了错?下面是我的上传方法:

代码语言:javascript
复制
public void upload(String title, String genre, String description, String songuri, int accountId) {

    File song = new File(songuri);

    try {
        String url = Uri.parse(getResources().getString(R.string.audio_upload_url))
                .buildUpon()
                .appendQueryParameter("title", title)
                .appendQueryParameter("tags", genre)
                .appendQueryParameter("description", description)
                .appendQueryParameter("accountId", String.valueOf(accountId))
                .build().toString();

        AsyncHttpResponseHandler httpResponseHandler = createHTTPResponseHandler();

        RequestParams params = new RequestParams();
        // this path could be retrieved from library or camera
        //String imageFilePath = "/storage/sdcard/DCIM/Camera/IMG.jpg";
        //params.put("data", new File(imageFilePath));

        params.put("song", song);

        AsyncHttpClient client = new AsyncHttpClient();
        client.post(url, params, httpResponseHandler);
    } catch (IOException e) {
        e.printStackTrace();
    }

}

下面是我初始化AsyncHttpResponseHandler类的方法。

代码语言:javascript
复制
 public AsyncHttpResponseHandler createHTTPResponseHandler() {
    AsyncHttpResponseHandler handler = new AsyncHttpResponseHandler() {
        @Override
        public void onStart() {
            super.onStart();
        }

        @Override
        public void onProgress(int position, int length) {
            super.onProgress(position, length);

            // progressBar.setProgress(position);
            //progressBar.setMax(length);
}


        @Override
        public void onFinish() {
            super.onFinish();
        }

        @Override
        public void onSuccess(int i, Header[] headers, byte[] bytes) {

        }

        @Override
        public void onFailure(int i, Header[] headers, byte[] bytes, Throwable throwable) {

        }

    };

    return handler;
}

在我的AsyncTask类中,这就是我调用upload方法的方式。

代码语言:javascript
复制
@Override
    protected UploadFragment doInBackground(UploadFragment... params) {
        String title = titleEt.getText().toString();
        String description = descriptionEt.getText().toString();

        int user_id;
        userdetails = sessionManager.getUserDetails();
        User user = userdetails.get(0);
        user_id = user.getUserid();

        upload(title, "genre", description, songPath, user_id);
        return null;
    }

由于窗口泄漏,我在AsyncTask类的onPreExecute方法的最后一行得到了错误,这意味着我在执行doInBackground()方法时得到了一个错误。

EN

回答 1

Stack Overflow用户

发布于 2014-12-02 15:30:38

使用谷歌提供的用于网络通信的Volley库。在android-async-http-library中,我们不能取消特定的请求,但可以使用volley。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27243868

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档