android系统中的同步改造请求

android系统中的同步改造请求,android,retrofit,retrofit2,Android,Retrofit,Retrofit2,我正在尝试从Api服务下载LaodFile,所以我正在使用改装库,下面的代码可以工作,但工作方式是异步运行的,它开始同时下载所有文件,我想在一个请求(下载过程)完成并收到响应时,同步下载文件,其他请求(下载过程)也可以工作,我该怎么做?以及最终如何处理所有请求完成 for (int i = 0; i < urlList.size; i++){ downloadFile(headerData,context,urlList.get(

我正在尝试从Api服务下载LaodFile,所以我正在使用改装库,下面的代码可以工作,但工作方式是异步运行的,它开始同时下载所有文件,我想在一个请求(下载过程)完成并收到响应时,同步下载文件,其他请求(下载过程)也可以工作,我该怎么做?以及最终如何处理所有请求完成

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