У меня есть приложение, которое загружает файлы с сервера с помощью Retrofit ..... на моем макете xml У меня есть две кнопки, если вы нажимаете на них, они посылают разные параметры для загрузки разных файлов, эта часть работает нормально, я нажимаю наодна и программы начинают выводить файл и другие кнопки, и он загружает второй файл, когда первый завершен.У меня также есть кнопка отмены (чтобы отменить загрузку), проблема в том, что кнопка отмены работает только один раз, я думаю, потому что каждый раз, когда она создает новую «загрузку» со своим идентификатором.
Так что если янажмите «Загрузить 1», затем «Загрузить 2», а затем нажмите «Отмена». Я могу только отменить загрузку 2.
У меня вопрос, можно определить, какой файл отменить?
<Button
android:id="@+id/btn_download"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="128dp"
android:layout_marginLeft="128dp"
android:layout_marginTop="36dp"
android:text="Download"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<Button
android:id="@+id/btn_download2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="128dp"
android:layout_marginLeft="128dp"
android:layout_marginTop="124dp"
android:text="Download 2"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<Button
android:id="@+id/btn_cancel"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="140dp"
android:layout_marginLeft="140dp"
android:layout_marginTop="196dp"
android:text="Cancel"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
private void downloadFile(final String fileName, String f_id, final String id) {
Retrofit.Builder builder = new Retrofit.Builder().baseUrl("mywebsite/api/")
.addConverterFactory(ScalarsConverterFactory.create())
.addConverterFactory(GsonConverterFactory.create());
Retrofit retrofit = builder.build();
FileDownloadClient fileDownloadClient = retrofit.create(FileDownloadClient.class);
final String fileName = fileName;
final String f_id = f_id;
Map<String, Object> postdata = new HashMap<>();
postdata.put("Parametros", "aquii")
postdata.put("Parametros", "aquii")
postdata.put("Parametros", "aquii")
final Call<ResponseBody> call = fileDownloadClient.downloadFileStream(postdata);
call.enqueue(new Callback<ResponseBody>() {
@Override
public void onResponse(Call<ResponseBody> call, final Response<ResponseBody> response) {
sendOnChannel2("Download", "Download in progress", 2000, id);
new AsyncTask<Void, Void, Void>() {
@Override
protected Void doInBackground(Void... voids) {
boolean success = writeResponseBodyToDisk(response.body(), fileName, id);
runOnUiThread(new Runnable() {
@Override
public void run() {
cancelButton.setVisibility(View.GONE);
Toast.makeText(MainActivity.this, "Download Complete", Toast.LENGTH_LONG).show();
}
});
return null;
}
}.execute();
}
@Override
public void onFailure(Call<ResponseBody> call, Throwable t) {
if(call.isCanceled()) {
Toast.makeText(MainActivity.this, "Request Cancelled :( ", Toast.LENGTH_LONG).show();
} else {
Toast.makeText(MainActivity.this, "Download failed :(", Toast.LENGTH_LONG).show();
}
}
});
cancelButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
call.cancel();
cancelNotification("Download", "Download cancelled", 0, id);
}
});
}