Android中的同步改造请求

时间:2019-12-14 13:26:25

标签: android retrofit retrofit2

我正在尝试从Api Services下载downlaodFile,因此我正在使用Retrofit库,以下代码可以正常工作,但可以异步运行,它开始同时下载所有文件,我想在一个请求时以同步方式下载文件(下载过程)已完成且响应到来,其他请求(下载过程)将起作用,我该怎么办?以及如何最终处理所有请求

for (int i = 0; i < urlList.size; i++){                        
      downloadFile(headerData,context,urlList.get(i),fileNameList.get(i),fileType.get(i));
}

downloadFile.class

public static void downloadFile(String headerData,Context context,String url,String fileName,String fileType){

        RestInterface restInterface = RetroClient.getClientFile(url).create(RestInterface.class);
        Call<ResponseBody> call = restInterface.doGetFile(headerData);
        call.enqueue(new Callback<ResponseBody>() {
            @Override
            public void onResponse(Call<ResponseBody> call, Response<ResponseBody> response) {

                if(response.isSuccessful()){
                    Log.d("Downloading FileResult:","" + response.body());
                    boolean success = 
                   Utils.writeResponseBodyToDisk(response.body(),context,fileName,fileType);

                    if(success == true){
                        startManager(context);
                    }

                }

            }

            @Override
            public void onFailure(Call<ResponseBody> call, Throwable t) {
                Log.e("TAG", "error" + t.getMessage());
            }
        });

    }

RestInterfac类

public interface RestInterface {

    @GET(".")
    Call<ResponseBody> doGetFile(@Header("Authorization") String authHeader);

}

RetroClient类

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

与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;
        }
    }

调用下载文件

    public static void downloadFile(String headerData,Context context,String url,String fileName,String fileType){

        new DownloadFileTask(headerData,context,url,fileName,fileType).execute();
}

0 个答案:

没有答案