图像上的多个进度条

时间:2015-06-03 06:48:27

标签: android android-asynctask android-image android-progressbar

我有多个图像,我使用asynctask在php服务器上传我的问题是我想在每个图像上单独显示循环进度条,如whatsapp但不知道该怎么做。这是我的代码

/**
 * Uploading the file to server
 * */
private class UploadFileToServer extends AsyncTask<Void, Integer, String> {
    @Override
    protected void onPreExecute() {

        super.onPreExecute();
    }

    @Override
    protected void onProgressUpdate(Integer... progress) {

    }

    @Override
    protected String doInBackground(Void... params)
    {
        return uploadFile();
    }

    @SuppressWarnings("deprecation")
    private String uploadFile() {
        String responseString = null;

        HttpClient httpclient = new DefaultHttpClient();
        HttpPost httppost = new HttpPost(serviceurl+"conversations.php");


        try {
            MultipartEntityBuilder entity = MultipartEntityBuilder.create();        




            /* example for setting a HttpMultipartMode */
            entity.setMode(HttpMultipartMode.BROWSER_COMPATIBLE);


            File sourceFile = new File(imgDecodableString);


            // Progress listener - updates task's progress
            MyHttpEntity.ProgressListener progressListener =
                    new MyHttpEntity.ProgressListener() {
                        @Override
                        public void transferred(float progress) {
                           publishProgress((int) progress);

                        }
                    };

            // Adding file data to http body
            entity.addPart("file", new FileBody(sourceFile));

            // Extra parameters if you want to pass to server
                    entity.addTextBody("from_user",(prefid.getString("userid", null)),ContentType.TEXT_PLAIN);
            entity.addTextBody("to_user",touser_id,ContentType.TEXT_PLAIN);
            entity.addTextBody("message_type", msg_type,ContentType.TEXT_PLAIN);    

            httppost.setEntity(new MyHttpEntity(entity.build(),
                    progressListener));

            // Making server call
            HttpResponse response = httpclient.execute(httppost);
            HttpEntity r_entity = response.getEntity();

            int statusCode = response.getStatusLine().getStatusCode();
            if (statusCode == 200) {


                responseString = EntityUtils.toString(r_entity);
            } else {
                responseString = "Error occurred! Http Status Code: "
                        + statusCode;
            }

        } catch (ClientProtocolException e) {
            responseString = e.toString();
        } catch (IOException e) {
            responseString = e.toString();
        }

        return responseString;

    }

    @Override
    protected void onPostExecute(String result) {
        super.onPostExecute(result);



    }

}

我在我的主要活动中调用上面的代码,我使用它来上传图像和视频。

请帮助我如何在多个图像上设置进度条,与whatsapp相同

由于

1 个答案:

答案 0 :(得分:2)

你可以将View传递给AsyncTask,通过创建新的构造函数然后显示/隐藏它,注意你必须为视图runOnUIThread。

private class UploadFileToServer extends AsyncTask<Void, Integer, String> {
    ImageView iv_loading;
    public UploadFileToServer(ImageView iv_loading){
        this.iv_loading = iv_loading;
    }
     @Override
    protected void onPreExecute() {
        super.onPreExecute();
        runOnUiThread(new Runnable() {
                              @Override
                              public void run() {
                                  iv_loading.setVisibility(View.VISIBLE);
                              }
                          }
            );
    }
    ...
    @Override
    protected void onPostExecute(String result) {
        super.onPostExecute(result);
        runOnUiThread(new Runnable() {
                              @Override
                              public void run() {
                                  iv_loading.setVisibility(View.GONE);
                              }
                          }
            );

    }   
}