上传json数据时如何按百分比显示进度条状态?

2023-11-25

我正在上传字符串和照片。它工作正常。现在我想在上传百分比数据时显示进度条,但百分比很快显示到 100 百分比,并且需要更多时间上传,最后到达后执行方法。

protected class upload_images extends AsyncTask<String, Integer, String> {
        ProgressDialog progressDialog;
            @Override
            protected void onPreExecute() {
                super.onPreExecute();
               // showDialog(progress_bar_type);
                progressDialog = new ProgressDialog(Accept_Report.this);
                progressDialog.setCancelable(false);
                //  dialog.setCanceledOnTouchOutside(false);
                progressDialog.setIndeterminate(false);
              //  progressDialog.setMax(100);
                progressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
               // progressDialog.setProgress(0);
                progressDialog.setMax(100);
               // progressDialog.setMessage("Loading ...");
                progressDialog.show();
             //  ProgressBar progressBar = (ProgressBar)findViewById(R.id.progressBar2);
            }
            @Override
            protected String doInBackground(String... params) {
                URL url;
                HttpURLConnection connection = null;
                String http=Util.URL+"reports/media/create";
                try {
                    url = new URL(http);
                    connection = (HttpURLConnection) url.openConnection();
                    connection.setDoInput(true);
                    connection.setRequestMethod("POST");
                  /*  connection.setConnectTimeout(50000);
                    connection.setReadTimeout(50000);*/
                    connection.setRequestProperty("Content-Type", "application/json");
                    connection.setRequestProperty("Content-Language", "en-US");
                    String encoded = Base64.encodeToString(("app" + ":" + "sFif4au7wet8gpsT0boK1oM2Yud6M1").getBytes("UTF-8"), Base64.NO_WRAP);
                    connection.setRequestProperty("Authorization", "Basic " + encoded);
                    connection.setUseCaches(false);
                    connection.setDoOutput(true);
                    connection.connect();

                    jsonArray = new JSONArray();

                    right = send_right.toString().replaceAll("\\[", "").replaceAll("\\]", "");
                    if((right!=null)&&(right!="")) {
                        JSONObject pnObj = new JSONObject();
                        pnObj.put("comments", right_cm);
                        pnObj.put("section", right_sec);
                        pnObj.put("pictures", right);
                        jsonArray.put(pnObj);
                    }    

                       // return totalSize;

                     JSONObject jsonParam = new JSONObject();
                     jsonParam.put("media", jsonArray);

                    //Send request


                        int count = 0;
                        OutputStream wr = connection.getOutputStream();
                        InputStream inputStream = null;
                        byte[] payload = jsonParam.toString().getBytes("UTF-8");
                        int totalSze = payload.length;
                        Log.e("Total size ", "" + totalSze);
                        int bytesTransferred = 0;
                       int chunkSize = (2*totalSze)/100;
                        boolean last_loop = false;
                       // publishProgress(0);

                        while (bytesTransferred < totalSze) {

                            Log.e("bytes transferred", "" + bytesTransferred);
                            int nextChunkSize = totalSze - bytesTransferred;
                            Log.e("nextchunck",""+nextChunkSize);

                            //int writer_size = wr.toString().getBytes("UTF-8").length;
                            Log.e("chunk size", "" + chunkSize);
                            if (nextChunkSize > chunkSize) {
                                nextChunkSize = chunkSize;
                            }


                            wr.write(payload, bytesTransferred, nextChunkSize);
                            bytesTransferred += nextChunkSize;
                            Log.e("byte",""+wr.toString().getBytes("UTF-8").length);

                            Log.e("progress-transferred", "" + bytesTransferred +" total "+totalSze);


                            double cal = (( (double)bytesTransferred / (double) totalSze) * 100);

                            double rounded = (double) Math.round(cal * 100.0) / 100.0;

                            Log.e("progress",""+(int)rounded);

                            publishProgress((int)rounded);

                        wr.flush();
                        wr.close();

                            }catch(Exception e){
                                Log.d("Exception", e.toString());
                            }
                        }*/
                        Log.e("While loop exit", "");
                      /*  wr.flush ();
                        wr.close();*/


                    }catch (OutOfMemoryError e)
                    {
                        e.printStackTrace();
                    }

                    //Get Response
                    StringBuilder sb = new StringBuilder();
                    HttpResultimage =connection.getResponseCode();
                    Log.e("res",""+HttpResultimage);

                    if(HttpResultimage==204)
                    {
                        BufferedReader br = new BufferedReader(new InputStreamReader(connection.getInputStream(),"utf-8"));
                        String line = null;
                        while ((line = br.readLine()) != null) {
                            sb.append(line + "\n");
                        }
                        br.close();
                        System.out.println("" + sb.toString());
                    }else{
                    }



                } catch (Exception e) {
                    e.printStackTrace();
                    return null;
                } finally {
                    if(connection != null) {
                        connection.disconnect();
                    }
                }
                return null;
            }
            @Override
            protected void onProgressUpdate(Integer... values){
                super.onProgressUpdate(values);
              //  Log.e("dfsf",""+values[0]);
                progressDialog.setProgress(values[0]);
             //   progressDialog.setProgress(values[0]);

            }

            @Override
            protected void onPostExecute(String result) {
                if (HttpResultimage==204) {
                  progressDialog.dismiss();
                }
            }
        }

看看这个教程 -http://www.androidhive.info/2014/12/android-uploading-camera-image-video-to-server-with-progress-bar/

private class UploadFileToServer extends AsyncTask<Void, Integer, String> {
        @Override
        protected void onPreExecute() {
            // setting progress bar to zero
            progressBar.setProgress(0);
            super.onPreExecute();
        }

        @Override
        protected void onProgressUpdate(Integer... progress) {
            // Making progress bar visible
            progressBar.setVisibility(View.VISIBLE);

            // updating progress bar value
            progressBar.setProgress(progress[0]);

            // updating percentage value
            txtPercentage.setText(String.valueOf(progress[0]) + "%");
        }

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

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

            HttpClient httpclient = new DefaultHttpClient();
            HttpPost httppost = new HttpPost(Config.FILE_UPLOAD_URL);

            try {
                AndroidMultiPartEntity entity = new AndroidMultiPartEntity(
                        new ProgressListener() {

                            @Override
                            public void transferred(long num) {
                                publishProgress((int) ((num / (float) totalSize) * 100));
                            }
                        });

                File sourceFile = new File(filePath);

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

                // Extra parameters if you want to pass to server
                entity.addPart("website",
                        new StringBody("www.androidhive.info"));
                entity.addPart("email", new StringBody("[email protected]"));

                totalSize = entity.getContentLength();
                httppost.setEntity(entity);

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

                int statusCode = response.getStatusLine().getStatusCode();
                if (statusCode == 200) {
                    // Server response
                    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) {
            Log.e(TAG, "Response from server: " + result);

            // showing the server response in an alert dialog
            showAlert(result);

            super.onPostExecute(result);
        }

    }
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

上传json数据时如何按百分比显示进度条状态? 的相关文章

随机推荐

  • 更改 CMAKE_CXX_FLAGS_DEBUG 和 CMake 中朋友的默认值

    我想更改默认值CMAKE CXX FLAGS RELEASE or CMAKE CXX FLAGS DEBUG在 CMake 中 基本上 我有一些项目默认值与 CMake 的默认值略有不同 例如 对于发布 我不应该问自己 哦 当使用 add
  • 迭代 Objective-C 对象的子对象时,镜像在 Swift 中不起作用

    我有一个与在 Swift 中使用 Mirror 相关的非常奇怪的问题 我正在迭代名为 Test 的类中的所有属性 let test Test let mirror Mirror reflecting test for i in mirror
  • 如何使枚举类与“位或”功能一起使用?

    我通常使用enum与 位或 或 在一起可以让一个对象拥有一些选项 如何使枚举类与 位或 功能一起使用 您需要重载枚举类的运算符 并通过转换为基础类型来实现它们 enum class foo unsigned bar 1 baz 2 foo
  • Symfony 安全性返回 401 响应而不是重定向

    我正在编写一个带有ajax身份验证的ajax应用程序 现在我开始使用silex中的symfony安全组件来处理身份验证 授权 使用简单的配置进行简单的测试 我进入防火墙的受保护区域 得到的响应是重定向到 login页面 但我在应用程序中需要
  • 阻止 UIPopover 自动关闭

    我想知道是否有办法阻止 iPad 弹出框在您触摸弹出框外的屏幕时自动关闭 如果没有 是否有某种类似于 popoverDidDismiss 的方法 我可以调用它来告诉弹出窗口何时被关闭 是的你可以 这是苹果文档中的内容 当由于用户在弹出窗口视
  • 在球体上翻转 Three.js 中的法线

    我一直在四处寻找 但还没有找到任何真正好的答案来回答我的问题 问题是我有这个球体 只是一个基本球体 我想翻转法线 所以 球体获得某种 空心 雕刻效果 然后将我的纹理应用到球体的 内部 关于如何翻转法线有什么想法吗 另外 如果不可能在 Thr
  • Pandas,在字符串中打印变量

    我有一个数据框 新 看起来像这样 num name1 name2 11 A AB 14 Y YX 25 L LS 39 Z ZT 我只想提取打印语句中的数值 这样我就有一个如下所示的输出 The value is 11 The value
  • Python:xml ElementTree(或 lxml)中的命名空间

    我想检索旧版 xml 文件 操作并保存它 这是我的代码 from xml etree import cElementTree as ET NS http www somedomain com XI Traffic 10 def fix xm
  • 如何在 gdb 中打印 Objective-C 类方法的结果?

    当使用 gdb 通过调试控制台 在 Xcode 4 中调试 iPad 程序时 我试图打印出运行类方法的结果 gdb po MyClass foo bar gdb 输出以下内容 当前上下文中没有符号 MyClass 有没有办法打印结果 NSS
  • C# 编译/构建是一个增量过程吗?

    我们的解决方案包含大量 C 项目 它们之间存在复杂的依赖关系 例如 项目A B C A依赖于B B依赖于C 如果我更改项目C中的一个文件 然后重建解决方案 项目A B C将一起重建 在C 中 构建包含两个过程 编译和链接 如果我更改项目C中
  • 如何与 NSPersistentCloudKitContainer 设置有序关系?

    当我检查时Used with CloudKit 错误Folder children must not be ordered出现了 关于有序关系有什么想法吗 使用 Xcode 11 测试版 3 这是Folder Entity 适用于 iOS
  • 在 Fortran 中使用“X != 0”时出现语法错误

    我的 Fortran 程序有一个问题 它除了计算素数分解 或应该做 之外什么也不做 这就是错误 C MinGW Fortran gt gfortran aufg3 f90 aufg3 f90 15 15 if prim i 0 and mo
  • 计算函数 sin()

    为了我的学习 我必须编写一个算法来计算sin 有了这个功能 然而 在我的算法中 我必须将 X 的值保持在 0 到 Pi 2 之间 所以 我写了我的算法 但所有结果都是错误的 这是我的代码 double sinX double x doubl
  • 在启动时获取azure应用程序服务插槽名称?

    当 asp net core 进程启动时 如何获取我的应用程序服务的插槽 生产或暂存 的名称 HTTP HOST 环境变量似乎没有在启动时设置 并且我没有要检查的 http 请求 如果我们想获取主机名 可以使用环境变量WEBSITE HOS
  • 在一个项目中编译 Silverlight 和 WPF 的最佳实践是什么?

    我刚刚完成了一个 Silverlight 项目 是时候进行一些清理了 我想将我的核心文件放入一个单独的项目中 我将从我的主 Silverlight 应用程序中引用该项目 其中一些类与 WPF 兼容 我非常希望能够将 Silverlight
  • C 获取文件的最后修改日期

    我想获取 C 语言中文件的最后修改日期 我发现的几乎所有来源都使用以下代码片段中的内容 char get last modified char file struct tm clock struct stat attr stat file
  • os.system()在哪个linux shell下执行命令?

    我在用 bin tcsh作为我的默认外壳 然而 tcsh 风格的命令os system setenv VAR val 对我不起作用 但os system export VAR val works 所以我的问题是我怎样才能知道os syste
  • 安全性:如何验证图像文件上传?

    我需要接受用户上传的图像文件 如何检查并 100 确定我没有收到恶意文件或其他内容 检查 mime 类型 重新画图 防病毒 重新绘制图像 读取它GD s imagecreatefromXXX 并将其保存回来imageXXX 通过这种方式 您
  • 使用 JWT 验证套接字 io 连接

    如何验证 socket io 连接 我的应用程序使用来自另一台服务器 python 的登录端点来获取令牌 每当用户在节点端打开套接字连接时 如何才能使用该令牌 io on connection function socket socket
  • 上传json数据时如何按百分比显示进度条状态?

    我正在上传字符串和照片 它工作正常 现在我想在上传百分比数据时显示进度条 但百分比很快显示到 100 百分比 并且需要更多时间上传 最后到达后执行方法 protected class upload images extends AsyncT