当前位置: 首页 > 知识库问答 >
问题:

Android上传文件百分比ProgressBar与OKHTTP3

谢灵均
2023-03-14

有人知道我如何添加一个进度条,告诉我有多少文件已经上传。这就是我在下面的代码中所做的,我已经成功地从我的手机中选择了一个文件,也成功地发送了它,但问题是,如果我上传了一个巨大的文件,我一直在等待,不知道什么时候会完成,这就是为什么我需要一个进度条,显示我有多少已经转移到服务器。这是我的代码,我尝试了不同的实现,但没有用。

public class MainActivity extends AppCompatActivity {
private Button fileUploadBtn;
protected static String IPADDRESS = "http://10.42.0.1/hugefile/save_file.php";

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    fileUploadBtn = (Button) findViewById(R.id.btnFileUpload);
    pickFile();

}

private void pickFile() {

    fileUploadBtn.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            new MaterialFilePicker()
                    .withActivity(MainActivity.this)
                    .withRequestCode(10).start();
        }
    });
}

ProgressDialog progress;

@Override
protected void onActivityResult(int requestCode, int resultCode, final Intent data) {
    progress = new ProgressDialog(MainActivity.this);
    progress.setTitle("Uploading File(s)");
    progress.setMessage("Please wait...");
    progress.show();
    if (requestCode == 10 && resultCode == RESULT_OK) {

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

                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("uploaded_file", file_path.substring(file_path.lastIndexOf("/") + 1), file_body).build();

                Request request = new Request.Builder()
                        .url(IPADDRESS)
                        .post(request_body)
                        .build();
                try {

                    Response response = client.newCall(request).execute();
                    Log.d("Server response", response.body().string());
                    if (!response.isSuccessful()) {
                        throw new IOException("Error : " + response);
                    }
                    progress.dismiss();
                } catch (IOException e) {
                    e.printStackTrace();

                }
            }
        });
        t.start();

    }
}

private String getMimeType(String path) {
    String extension = MimeTypeMap.getFileExtensionFromUrl(path);
    return MimeTypeMap.getSingleton().getMimeTypeFromExtension(extension);

}

}

共有1个答案

赵炯
2023-03-14

我认为你的整个解决方案需要一些修正。用一些对话框暂停用户是不好的做法,如果配置更改,你的上传进度可能会丢失。现在的新线我真的太粗糙了。因此,首先,我建议您将上传过程的代码移到Service或IntentService中。你可以在通知中显示进度和状态,然后用对话框或快捷键等提醒用户。其次,没有直接的方法来监控上传的进度。通常,最好的方法是实现自定义RequestBody,它将通知通过侦听器上传的字节。请reffer使用OKHTTP跟踪多部分文件上传的进度,然后您可以使用广播或事件总线发布进度。

 类似资料:
  • **了解更多信息:总上传时间为15分钟,但进度百分比在一秒钟内完成。

  • 我正在使用这个音频记录和视频文件,它是工作的,但我想用OKHTTP取代它。我没弄明白。有人能帮我一下吗?

  • 主要内容:本节引言,1.项目用到的图片上传的关键方法:,2.使用HttpConnection上传文件:,本节小结:本节引言 本节和下一节文件下载一样,慎入...现在实际开发涉及文件上传不会自己写上传代码,一般 会集成第三网络库来做图片上传,比如android-async-http,okhttp等,另外还有七牛也提供 了下载和上传的API,喜欢的可以去官网查看相关的API文档!本节的话有兴趣看看就好! 1.项目用到的图片上传的关键方法: 思前想后,还是决定先贴下公司项目中用到的图片上传的核心方法,

  • 当我点击选择文件按钮上传图像时,什么也没有发生。我试过所有的解决办法,但没有一个有效。我正在运行4.0.3的Galaxy Note(GT-N7000)上进行测试。我的最低SDK版本是版本8。 这是我的代码更多的信息... 谢谢

  • 我是android应用程序开发的新手,试图开发一个web视图应用程序,但似乎无法让文件上传工作。。。请帮忙 这是我的网页视图代码 公共类WebActive扩展了活动{ } 所以我在wv下添加了这个代码。setWebChromeClient//未记录的魔术方法覆盖//br>//如果您尝试在此处放置@override,Eclipse将对您发誓//Android 3.0 public void open

  • 本文向大家介绍android球形水波百分比控件代码,包括了android球形水波百分比控件代码的使用技巧和注意事项,需要的朋友参考一下 本文主要介绍的是一个球形水波的百分比控件,市面上有各种形形色色的百分比控件,我一直觉得水波是最炫的,UI给了我这个机会,然而网上搜了一大堆,不是太复杂,代码太多(反正我是调不出效果来),就是有瑕疵的,所以只好自己写了,这里开源出来,方便大家。有什么问题或者建议大家