#java #android #http-post #retrofit #retrofit2
#java #Android #http-post #модернизация #retrofit2
Вопрос:
Я разрабатываю приложение для Android с использованием retrofit. Я хочу загрузить файл любого типа на свой сервер с параметрами. Например, в моем приложении есть текстовое поле, например, поле электронной почты и поле загрузки файла. когда я ввел поля и нажал кнопку отправки. Он показывает процент загрузки файла и отправки файла и данных на сервер. когда процесс загрузки продолжается, он хочет показать процент заполненного файла. Как это возможно? Был ли какой-нибудь справочный сайт или учебник? Пожалуйста, помогите мне?
Ответ №1:
создайте этот интерфейс
public interface ProgressListener {
void transferred(long num);
}
И этот класс
public class CountingTypedFile extends TypedFile {
private static final int BUFFER_SIZE = 4096;
private final ProgressListener listener;
public CountingTypedFile(String mimeType, File file, ProgressListener listener) {
super(mimeType, file);
this.listener = listener;
}
@Override
public void writeTo(OutputStream out) throws IOException {
byte[] buffer = new byte[BUFFER_SIZE];
FileInputStream in = new FileInputStream(super.file());
long total = 0;
try {
int read;
while ((read = in.read(buffer)) != -1) {
total = read;
out.write(buffer, 0, read);
try{
if (this.listener != null)
this.listener.transferred(total);
}catch (Exception e){
}
}
} finally {
in.close();
}
}
}
Определите этот метод
@POST("/{path}")
public JsonObject makeRequestForAttachmentsUpload(@Path(value = "path", encode = false) String path, @Body MultipartTypedOutput multipartTypedOutput);
затем вызовите метод загрузки следующим образом
RestClient restClient = new RestClient();
ApiService apiService = restClient.getApiService();
MultipartTypedOutput multipartTypedOutput = new MultipartTypedOutput();
// add and string parameters
for (String key : requestParams.keySet()) {
multipartTypedOutput.addPart(key, new TypedString(requestParams.get(key)));
}
// add attchments
multipartTypedOutput.addPart(attachmentName, new CountingTypedFile(attachmentType, new File(attachmentPath), listener));
apiService.makeRequestForAttachmentsUpload(requestName, multipartTypedOutput);
и прослушайте прогресс, определив этого слушателя
listener = new DPAPIService.ProgressListener() {
@Override
public void transferred(long num) {
publishProgress(((num / (float) fileSize)));
}
};
Комментарии:
1. Спасибо, Шабир. Я новичок в модернизации. Итак, можете ли вы сказать мне, что такое код gradle в Android studio.
2. Вы можете прочитать все подробности здесь futurestud.io/tutorials/retrofit-2-upgrade-guide-from-1-9
3. @shabir Ваш код использует старую модификацию. TypedFile не поддерживает новую модификацию. Я хочу новый модифицированный код.