【问题标题】:Multiple progress bar on image图像上的多个进度条
【发布时间】:2015-06-03 06:48:26
【问题描述】:

我有多个图像,我正在使用 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 中一样

谢谢

【问题讨论】:

  • 使用 Pre 和 PostExecute 函数来显示和隐藏加载视图。
  • 请仔细阅读我的问题,我在显示多个图像上的进度条时遇到问题,例如 whatsapp .. 上面的 asynctask 在活动类中,我的进度条在 baseadapter 类中
  • 我猜这不是最好的解决方案,但您可以将视图作为参数传递给AsyncTask
  • 请告诉我如何通过视图?
  • 您可以将创建者方法添加到您的UploadFileToServer,例如:public UploadFileToServer(View v)。我完全不确定这是否可行,但您可以尝试。这是因为适配器记录视图,所以我认为在某些情况下这是行不通的。

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


【解决方案1】:

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

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);
                              }
                          }
            );

    }   
}

【讨论】:

    猜你喜欢
    • 2012-09-04
    • 1970-01-01
    • 1970-01-01
    • 2015-08-17
    • 1970-01-01
    • 1970-01-01
    • 2018-06-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多