更新上传,服务超时

问题描述 投票:0回答:1

我正在前台服务中使用Retrofit进行放置请求,每当我发送多于1张图像时,它就会超时E/UploadPhotosService: onFailure: Failed to upload image java.net.SocketTimeoutException: timeout

  private void uploadImages(ArrayList<String> uploadUrls, ArrayList<String> selectedImagesList){
        for(int i = 0; i <uploadUrls.size(); i++){
            File file = new File(String.valueOf(Uri.parse(selectedImagesList.get(i))));
            RequestBody requestBody = RequestBody.create(MediaType.parse("image/jpeg"), file);
            RetrofitInterfaces.IUploadImages service = RetrofitClientInstance.getRetrofitInstance()
                    .create(RetrofitInterfaces.IUploadImages.class);
            Call<Void> call = service.listRepos(uploadUrls.get(i), requestBody);
            call.enqueue(new Callback<Void>() {
                @Override
                public void onResponse(@NonNull Call<Void> call, @NonNull Response<Void> response) {
                    if(response.code() == 200){
                        Log.d(TAG, "onResponse: Successfully uploaded image!");
                    }
                }

                @Override
                public void onFailure(@NonNull Call<Void> call, @NonNull Throwable t) {
                    Log.e(TAG, "onFailure: Failed to upload image", t);
                }
            });
        }

    }

调用改装请求:

 @Override
    public int onStartCommand(Intent intent, int flags, int startId) {

        uploadingProgressNotification();

        if(intent.getExtras() != null){
            mUploadUrls = Parcels.unwrap(intent.getParcelableExtra("upload_urls"));
            mSelectedImages = Parcels.unwrap(intent.getParcelableExtra("selected_images"));

            uploadImages(mUploadUrls, mSelectedImages); <--- network call here

        }

        return START_NOT_STICKY;       
    }

我也尝试过使用.execute();,但这根本不起作用。 .enqueue正在处理一幅图像,有时是两幅图像。

在常规活动中效果很好。这是由前台服务中的上传方式的限制所引起的吗?

android retrofit retrofit2 foreground-service
1个回答
-1
投票
okHttpBuilder.connectTimeout(3, TimeUnit.MINUTES); okHttpBuilder.readTimeout(3, TimeUnit.MINUTES); okHttpBuilder.writeTimeout(3, TimeUnit.MINUTES);
© www.soinside.com 2019 - 2024. All rights reserved.