我想显示上传百分比

时间:2018-12-23 17:00:58

标签: java android file-upload progress-bar

我有一个可以让用户上传文件的应用程序。现在就可以了。 他们可以上传文件,并在服务器端收到文件。 现在,我想在上传时向用户显示上传百分比。 我使用以下代码在服务器上上传文件。

这是我的Java代码:

        send.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                try{
                    new MaterialFilePicker().
                            withActivity(AddActivity.this).
                            withRequestCode(10).
                            start();


                }
                catch (Exception e){
                    return;
                }
            }
        });

这是我的方法:

ProgressDialog进度;

@Override
protected void onActivityResult(int requestCode, int resultCode, final Intent data) {
    if (requestCode==10 && resultCode==RESULT_OK){


        progress = new ProgressDialog(AddActivity.this);
        progress.setTitle("Uploading");
        progress.setMessage("please wait...");
        progress.show();


        Thread t = new Thread(new Runnable() {
            @Override
            public void run() {
                File f = new File(data.getStringExtra(FilePickerActivity.RESULT_FILE_PATH));
                String content_type = getMimeType(f.getPath());
                String file_path = f.getAbsolutePath();

                file_size = String.valueOf(f.length()/1024);

                OkHttpClient client = new OkHttpClient();
                RequestBody file_body = RequestBody.create(MediaType.parse(content_type),f);

                RequestBody request_body = new MultipartBody.Builder()
                        .setType(MultipartBody.FORM)
                        .addFormDataPart("type",content_type)
                        .addFormDataPart("upload_file",code+file_path.substring(file_path.lastIndexOf(".")),file_body)
                        .build();

                code2 = code+file_path.substring(file_path.lastIndexOf("."));

                Request request = new Request.Builder()
                        .url("http://api.mysite.com/api/uploadfile")
                        .post(request_body)
                        .build();

                try {
                    Response response = client.newCall(request).execute();

                    Log.d("msg",request_body.toString());
                    Log.d("msg",f.getPath().toString());
                    Log.d("msg",getMimeType(f.getPath()));
                    Log.d("msg33",code+file_path.substring(file_path.lastIndexOf(".")));

                    if (!response.isSuccessful()){
                        throw new IOException(("Error:"+response));
                    }
                    progress.dismiss();

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

            }


        });
        t.start();
    }
}

请帮助我增加上传百分比。
谢谢

1 个答案:

答案 0 :(得分:0)

您在这里做错了很多事情:

  1. 负责上传文件的逻辑不应位于onActivityResult()
  2. 您应该将其分成不同的方法
  3. 使用这样的线程不是一个好主意

如果您要上传文件或大文件,则应在IntentService类中进行操作(您将必须创建自己的类并扩展IntentService),这适用于诸如那。我建议您学习Retrofit2和OkHttp库,因为它会使它变得更加容易。

您可以在此处找到其中一种方法的示例:Is it possible to show progress bar when upload image via Retrofit 2?

在stackoverflow上要求ppl为您完全编写代码不是提高技能的好方法。检查我给您的链接。

祝你好运

编辑:

Android服务:http://www.vogella.com/tutorials/AndroidServices/article.htmlhttps://developer.android.com/training/run-background-service/create-service

改造2:http://www.vogella.com/tutorials/Retrofit/article.html

OkHttp:https://www.journaldev.com/13629/okhttp-android-example-tutorial

示例:Is it possible to show progress bar when upload image via Retrofit 2?

这些链接提供了编写此功能所需的所有信息。我在YouTube上没有这样的视频。我从不使用YouTube获取此类信息。