gpt4 book ai didi

java - Android上传文件百分比ProgressBar与OKHTTP3

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:12:53 24 4
gpt4 key购买 nike

有谁知道我如何添加一个进度条来告诉我有多少文件已上传。这就是我在下面的代码中设法做到的,我已经设法从我的手机中选择了一个文件并且还设法发送了它,但问题是如果我正在上传一个巨大的文件我一直在等待不知道什么时候会完成,这就是为什么我需要一个进度条来显示有多少已传输到服务器。这是我拥有的代码,我尝试了不同的实现但无济于事。

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

}

最佳答案

我认为您的整个解决方案需要一些更正。使用某些对话框暂停用户是不好的做法,如果配置更改,您的上传进度也可能会丢失。而new Thread我现在真的太简陋了。因此,首先我建议您将上传过程的代码移到 Service 或 IntentService 中。您可以在通知中显示进度和状态,然后通过对话框或 snackbar 等提醒用户。其次,没有直接的方法来监控上传进度。通常最好的方法是实现自定义 RequestBody,它将通知通过监听器上传的字节。请引用Tracking progress of multipart file upload using OKHTTP然后您可以使用广播或事件总线来发布进度。

关于java - Android上传文件百分比ProgressBar与OKHTTP3,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44554729/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com