我目前正在使用Square的Retrofit进行Android网络通信.有没有办法在创建进度通知的任务期间取得进展,类似于Facebook在上传图像时使用的进度通知?
使用案例可以在不压缩或缩放的情况下加载有望获得完整图像质量的图像.
我看到asynctask是如何可能的,但这会破坏使用Retrofit的目的.然而,这可能是我必须采取的路线.
我正在尝试使用改进2来下载/上传文件,但找不到任何有关如何操作的教程示例.我的下载代码是:
@GET("documents/checkout")
public Call<File> checkout(@Query(value = "documentUrl") String documentUrl, @Query(value = "accessToken") String accessToken, @Query(value = "readOnly") boolean readOnly);
Run Code Online (Sandbox Code Playgroud)
和
Call<File> call = RetrofitSingleton.getInstance(serverAddress)
.checkout(document.getContentUrl(), apiToken, readOnly[i]);
call.enqueue(new Callback<File>() {
@Override
public void onResponse(Response<File> response,
Retrofit retrofit) {
String fileName = document.getFileName();
try {
System.out.println(response.body());
long fileLength = response.body().length();
InputStream input = new FileInputStream(response.body());
File path = Environment.getExternalStorageDirectory();
File file = new File(path, fileName);
BufferedOutputStream output = new BufferedOutputStream(
new FileOutputStream(file));
byte data[] = new byte[1024];
long total = 0; …Run Code Online (Sandbox Code Playgroud) @Streaming
@GET
Call<ResponseBody> downloadSong(@Url String url);
Run Code Online (Sandbox Code Playgroud)
上面的代码用于使用改造来异步下载文件.我想得到下载的进度,如果有任何暂停/恢复的可能性请回答
我目前正在使用Retrofit 2,我想从我的服务器下载一些文件.我可以回拨一些事件来捕获百分比完整的下载文件,以显示在此图片的通知中
我引用那个链接,但它是上传,我可以用同样的问题吗? 链接
使用改造2库时是否可以显示进度?
我正在使用Retrofit2在单个多部分请求中上传动态数量的文件.我的改装界面看起来像这样 -
public interface FileUploadService {
@Multipart
@POST("upload")
Call<ResponseBody> uploadMultipleFilesDynamic(
@Part List<MultipartBody.Part> files);
}
Run Code Online (Sandbox Code Playgroud)
现在我想跟踪这个多文件上传的进度.此解决方案解释了如何通过扩展在多部分请求中上载单个文件时取得进展RequestBody.虽然我似乎无法理解如何将此应用于我的多个文件请求.一个解决方案,我能想到的是要建立ProgressRequestBody通过扩展OkHTTP MultipartBody,而不是类RequestBody,但OkHTTP3实现了MultipartBody作为一个final类使其无法扩展.任何人都可以指出我正确的方向,因为它是一个巨大的阻止我无法向用户显示文件上传的进度.或者是否有任何我可以实现的工作来实现此功能?
我有一个 android.net.Uri 指向我需要确定文件大小的文件。目前这是使用 contentResolver 上的查询完成的(我使用的是 Xamarin,所以它是 C#):
var cursor = contentResolver.Query(uri, new string[] {
Android.Provider.OpenableColumns.Size,
Android.Provider.OpenableColumns.DisplayName
}, null, null, null);
cursor.MoveToFirst();
size = cursor.GetLong(0);
fileName = cursor.GetString(1);
cursor.Close();
Run Code Online (Sandbox Code Playgroud)
这在大多数情况下都有效,但对于某些文件,该值似乎比正确的文件大小略大(我使用 Total Commander 作为参考)。

必须有更好的方法来做到这一点,我真的需要确切的大小信息,并且由于文件非常大,无法先将它们读入内存。为什么我的方法会产生错误的结果?
在此先感谢您的帮助。