android系统中的同步改造请求
我正在尝试从Api服务下载LaodFile,所以我正在使用改装库,下面的代码可以工作,但工作方式是异步运行的,它开始同时下载所有文件,我想在一个请求(下载过程)完成并收到响应时,同步下载文件,其他请求(下载过程)也可以工作,我该怎么做?以及最终如何处理所有请求完成android系统中的同步改造请求,android,retrofit,retrofit2,Android,Retrofit,Retrofit2,我正在尝试从Api服务下载LaodFile,所以我正在使用改装库,下面的代码可以工作,但工作方式是异步运行的,它开始同时下载所有文件,我想在一个请求(下载过程)完成并收到响应时,同步下载文件,其他请求(下载过程)也可以工作,我该怎么做?以及最终如何处理所有请求完成 for (int i = 0; i < urlList.size; i++){ downloadFile(headerData,context,urlList.get(
for (int i = 0; i < urlList.size; i++){
downloadFile(headerData,context,urlList.get(i),fileNameList.get(i),fileType.get(i));
}
sncrony与execute方法
private static class DownloadFileTask extends AsyncTask<String,Void,String>{
String Url,Header,FileName,FileType;
Context con;
public DownloadFileTask(String header,Context context,String url,String FileName,String FileType){
Url = url;
Header = header;
con = context;
this.FileName = FileName;
this.FileType = FileType;
}
@Override
protected String doInBackground(String... strings) {
RestInterface restInterface = RetroClient.getClientFile(Url).create(RestInterface.class);
Call<ResponseBody> call = restInterface.doGetFile(Header);
try{
Response<ResponseBody> response = call.execute();
ResponseBody responseBody = response.body();
Log.d("Downloading FileResult:","" + responseBody);
if(response.isSuccessful()){
boolean success = Utils.writeResponseBodyToDisk(response.body(),con,FileName,FileType);
/* if(success == true){
startManager(context);
}*/
}
}catch (Exception e){
e.printStackTrace();
}
return null;
}
}
使用
execute()
而不是enqueue()
。请注意,考虑到要将文件加载到内存中,这种方法只适用于非常小的文件。对于较大的文件,请直接使用OkHttp,我在上面使用execute方法编辑代码,是否同步?
public interface RestInterface {
@GET(".")
Call<ResponseBody> doGetFile(@Header("Authorization") String authHeader);
}
public class RetroClient{
public static Retrofit getClientFile(String url) {
String BaseUrl = url + "/";
Gson gson = new GsonBuilder()
.setLenient()
.create();
HttpLoggingInterceptor interceptor = new HttpLoggingInterceptor();
interceptor.setLevel(HttpLoggingInterceptor.Level.BODY);
OkHttpClient client = new OkHttpClient.Builder().addInterceptor(interceptor).build();
return new Retrofit.Builder()
.baseUrl(BaseUrl)
.addConverterFactory(ScalarsConverterFactory.create())
.addConverterFactory(GsonConverterFactory.create(gson))
.client(client)
.build();
}
}
private static class DownloadFileTask extends AsyncTask<String,Void,String>{
String Url,Header,FileName,FileType;
Context con;
public DownloadFileTask(String header,Context context,String url,String FileName,String FileType){
Url = url;
Header = header;
con = context;
this.FileName = FileName;
this.FileType = FileType;
}
@Override
protected String doInBackground(String... strings) {
RestInterface restInterface = RetroClient.getClientFile(Url).create(RestInterface.class);
Call<ResponseBody> call = restInterface.doGetFile(Header);
try{
Response<ResponseBody> response = call.execute();
ResponseBody responseBody = response.body();
Log.d("Downloading FileResult:","" + responseBody);
if(response.isSuccessful()){
boolean success = Utils.writeResponseBodyToDisk(response.body(),con,FileName,FileType);
/* if(success == true){
startManager(context);
}*/
}
}catch (Exception e){
e.printStackTrace();
}
return null;
}
}
public static void downloadFile(String headerData,Context context,String url,String fileName,String fileType){
new DownloadFileTask(headerData,context,url,fileName,fileType).execute();
}