Загрузка большого файла с помощью AndroidAsyncHttp завершается неудачей через некоторое время с android

Я пытаюсь загрузить файл с помощью AsyncHttpClient.Ниже приведен код :

public class uploadVideoAsyncTask extends AsyncTask<String,Void,JSONObject>{
    Context context;
    SyncHttpClient client;
    JSONObject response;

    public uploadVideoAsyncTask(Context context) {
        this.context = context;
    }

    @Override
    protected JSONObject doInBackground(String... params) {
        if(client != null){
            RequestParams data = new RequestParams();
            File video = new File(params[0]);
            try {
                data.put("upload", video, "video/*");
                Log.d("debug", LoginActivity.URL + LoginActivity.URL_UPLOAD_VIDEO);
                client.post(LoginActivity.URL+LoginActivity.URL_UPLOAD_VIDEO,data,new JsonHttpResponseHandler(){

                    @Override
                    public void onProgress(long bytesWritten, long totalSize) {
                        super.onProgress(bytesWritten, totalSize);
                        Log.d("debug",bytesWritten +"  "+ totalSize);
                    }

                    @Override
                    public void onUserException(Throwable error) {
                        super.onUserException(error);
                        Log.d("debug",error.toString());
                    }

                    @Override
                    public void onSuccess(int statusCode, Header[] headers, JSONObject response) {
                        super.onSuccess(statusCode, headers, response);
                        Log.d("debug", response.toString());
                        initializeResponse(response);
                    }

                    @Override
                    public void onFailure(int statusCode, Header[] headers, Throwable throwable, JSONObject errorResponse) {
                        super.onFailure(statusCode, headers, throwable, errorResponse);
                        Log.d("debug", errorResponse.toString());
                        initializeResponse(errorResponse);
                    }

                    @Override
                    public void onFailure(int statusCode, Header[] headers, String responseString, Throwable throwable) {
                        super.onFailure(statusCode, headers, responseString, throwable);
                        Log.d("debug", responseString);
                        initializeResponse(null);
                    }
                });
            } catch (FileNotFoundException e) {
                e.printStackTrace();
                initializeResponse(null);
            }

        }else{
            initializeResponse(null);
        }
        return  this.response;
    }

    @Override
    protected void onPreExecute() {
        super.onPreExecute();
        initializeHttpClient();
    }

    @Override
    protected void onPostExecute(JSONObject jsonObject) {
        super.onPostExecute(jsonObject);
        Log.d("debug","ererr");
    }

    private void initializeResponse(JSONObject response){
        this.response = response;
    }

    private void initializeHttpClient(){
        if(client == null){
            client  = new SyncHttpClient();
            //client.setMaxRetriesAndTimeout(LoginActivity.maxRetries, LoginActivity.TIME_OUT);
            client.setTimeout(50000);
            Log.d("debug", client.getResponseTimeout() + "");
            Log.d("debug", client.getConnectTimeout()+"");
            client.addHeader("x-access-token", "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiI1NzFiOTBmOTM4ZmQ1NzA4MGUzMTY1Y2IifQ.2l4DVRTVhxFnD796M5CPIEloGW6N-qBnXxa3lC0XDRU");
            //client.addHeader("Content-Type", " application/json");
        }
    }

}

этот код отлично работает, если загрузка файла занимает очень меньше времени, около 1 минуты, но если размер файла больше и занимает больше времени . AsyncHttpclient прекращает загрузку файла через некоторое время без каких-либо ошибок.

Я уже пробовал с другим setTimeOut .
Также нет ошибки на стороне сервера. с помощью Advanced rest client я могу загрузить любой размер файла.

Спасибо

1 ответ

  1. Set
     RequestParams data = new RequestParams();
    if (file != null && file.exists())
      data.put("Db_file", new FileInputStream(file));
      data.setForceMultipartEntityContentType(true);
    

    Класс RequestParams создает не буферизованный ByteArrayEntity для передачи на POST или PUT call, это очень легко вызвать ошибки OutOfMemory с большими файлами, как при загрузке видео или mp3 на сервер, которые часто больше, чем 4 или 5 Мб.