Ошибка timeout, загрузив данные url android

Я разрабатываю приложение в Android Studio (api min 10). В этом приложении я загружаю данные, которых я получаю через url. Когда устройство в той, которую я тестирую, - больше api 10, он это реализует правильно. Однако, когда это api 10, не получается ничто. Как я могу решать это?

Код задания в background - следующий:

private class DownloadJsonTask extends AsyncTask<String, Void, ArrayList<String>> {

    private ArrayList<String> parseJsonCentrosFile(String jsonLibrosInformation)
            throws JSONException {

           //Parseo de los datos
    }

    @Override
    protected ArrayList<String> doInBackground(String... urls) {

        try {
            return downloadUrl(urls[0]);
        } catch (IOException e) {

            return null;
        }
    }
    private ArrayList<String> downloadUrl(String myUrl) throws IOException {
        InputStream is = null;
        try {
            is = openHttpInputStream(myUrl);

            try {
                return parseJsonCentrosFile(streamToString(is));
            } catch (JSONException e) {
                e.printStackTrace();
            }
        } finally {

            if (is != null) {
                is.close();
            }
        }
        return null;
    }


    public String streamToString(InputStream stream) throws IOException,
            UnsupportedEncodingException {
        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        int bufferSize = 1024;
        byte[] buffer = new byte[bufferSize];
        int length = 0;
        do {
            length = stream.read(buffer);
            if (length != -1) {
                baos.write(buffer, 0, length);
            }
        } while (length != -1);
        return baos.toString("UTF-8");
    }

    @Override
    protected void onPostExecute(ArrayList<String> result) {

      //Código de onPostExecute

    }
} 

Код получение связь:

 private InputStream openHttpInputStream(String myUrl)
        throws MalformedURLException, IOException, ProtocolException {
    InputStream is;
    URL url = new URL(myUrl);
    HttpURLConnection conn = (HttpURLConnection) url.openConnection();
    conn.setRequestMethod("GET");

    conn.connect();
    is = conn.getInputStream();
    return is;
} 

Файл, который соглашается из-за url, это не загружает а следовательно я думаю, что ошибка - это. Как мог бы загружаться json и потом читать это файла, который загружает меня?

Ошибка logCat - следующая:

04-14 18:36:53.281 793-807/
es.libros/AndroidRuntime:FATAL EXCEPTION: AsyncTask #1
                                                                                 java.lang.RuntimeException: An error occured while executing doInBackground()
                                                                         at android.os.AsyncTask$3.done(AsyncTask.java:278)
                                                                         at java.util.concurrent.FutureTask$Sync.innerSetException(FutureTask.java:273)
                                                                         at java.util.concurrent.FutureTask.setException(FutureTask.java:124)
                                                                         at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:307)
                                                                         at java.util.concurrent.FutureTask.run(FutureTask.java:137)
                                                                         at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:208)
                                                                         at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076)
                                                                         at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569)
                                                                         at java.lang.Thread.run(Thread.java:856)
                                                                      Caused by: java.lang.OutOfMemoryError
                                                                         at java.io.ByteArrayOutputStream.expand(ByteArrayOutputStream.java:91)
                                                                         at java.io.ByteArrayOutputStream.write(ByteArrayOutputStream.java:201)
                                                                         at es.user.bares_restaurantes.BarListFragment$DownloadJsonTask.streamToString(BarListFragment.java:703)
                                                                         at es.user.bares_restaurantes.BarListFragment$DownloadJsonTask.downloadUrl(BarListFragment.java:677)
                                                                         at es.user.bares_restaurantes.BarListFragment$DownloadJsonTask.doInBackground(BarListFragment.java:664)
                                                                         at es.bares_restaurantes.BarListFragment$DownloadJsonTask.doInBackground(BarListFragment.java:328)
                                                                         at android.os.AsyncTask$2.call(AsyncTask.java:264)
                                                                         at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305)
                                                                         at java.util.concurrent.FutureTask.run(FutureTask.java:137) 
                                                                         at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:208) 
                                                                         at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076) 
                                                                         at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569) 
                                                                         at java.lang.Thread.run(Thread.java:856) 
3
задан 14.04.2016, 21:43
2 ответа

Отказываясь от timeout в связи у нас есть, что проблема - "Unexpected end of Stream", вызванный вероятно ударными символами.

Измени твой метод streamToString() используя StringBuilder :

public String streamToString(InputStream stream) {
    try {
        BufferedReader r = new BufferedReader(new InputStreamReader(stream));
        StringBuilder totalDatos = new StringBuilder();
        String line;
        while ((line = r.readLine()) != null) {
            totalDatos.append(line);
        }
        return totalDatos.toString();
    } catch (UnsupportedEncodingException e) {
        Log.e(TAG, "UnsupportedEncodingException: " + e.getMessage());
    } catch (IOException e) {
        Log.e(TAG, "IOException : " + e.getMessage());
    }
    return null;
}

Также ты можешь изменять твой метод openHttpInputStream() чтобы получать InputStream, если связь была успешной, код 200 и так проверять по этой части, нет проблемы.

private InputStream openHttpInputStream(String myUrl) {
    InputStream is = null;
    try {

        URL url = new URL(myUrl);
        HttpURLConnection conn = (HttpURLConnection) url.openConnection();
        conn.setRequestMethod("GET");
        conn.connect();
        int connCode= conn.getResponseCode();
        if (connCode== HttpURLConnection.HTTP_OK) {
            is = conn.getInputStream();
            Log.e(TAG, "SE REALIZO LA CONEXION!, código " +  connCode);
        } else {
            Log.e(TAG, "NO SE PUDO REALIZAR LA CONEXION!");
        }
    } catch (IOException e) {
        Log.e(TAG, e.getMessage());
    } 
    return is;
}

Реализованные эти изменения ты можешь выполнять твой Asynctask и получать данные без проблемы:

String url = "https://www.turismoasturias.es/open-data/catalogo-de-datos?p_p_id=opendata_WAR_importportlet&p_p_lifecycle=2&p_p_state=normal&p_p_mode=view&p_p_resource_id=exportJson&p_p_cacheability=cacheLevelPage&p_p_col_id=column-1&p_p_col_count=1&_opendata_WAR_importportlet_structure=27548&_opendata_WAR_importportlet_robots=nofollow";
new DownloadJsonTask().execute(url); 

Другой важный способ оптимизировать ты загружаешься в подвижные устройства он состоит в том, чтобы сжимать файл, который должен загружать, в формат .gzip, например файл, который ты хочешь загрузить, содержали текст, если он сжат, уменьшает драматично размер!:

introducir la descripción de la imagen aquí

Тогда мы реализуем изменение в нашем методе для получения данных начиная с Url:

private InputStream openHttpInputStream(String myUrl) {
    InputStream is = null;
    try {
        URL url = new URL(myUrl);
        HttpURLConnection conn = (HttpURLConnection) url.openConnection();
        conn.setRequestMethod("GET");
        conn.setRequestProperty("Accept-Encoding", "gzip");
        conn.connect();
        int resCode = conn.getResponseCode();
        Log.i(TAG, "resCode : " + resCode);
        if (resCode == HttpURLConnection.HTTP_OK) {
            Log.i(TAG, "Se realizo la conexión!");
            is = conn.getInputStream();
            if(myUrl.indexOf(".gz")>0){ //detectamos si el archivo esta compreso.
                is = new GZIPInputStream(is);
                Log.i(TAG, "El url esta compreso como .gzip!");
            }
        } else {
            Log.e(TAG, "NO SE PUDO REALIZAR LA CONEXION! errorCode: " + resCode);
        }
    } catch (IOException e) {
        Log.e(TAG, e.getMessage());
    }
    return is;
}

Сейчас, если мы проверяем время, которое медлит с тем, чтобы загружать данные вместо casí 20 секунд, сейчас опоздай менее 1 секунды:

introducir la descripción de la imagen aquí

1
ответ дан 24.11.2019, 14:39
  • 1
    Комментарии не должны быть использованными для распространенных дискуссий; этот conversaci и # 243; n был , перемещенной в чат . –  09.04.2016, 19:45
  • 2
    Проблема состоит в том, что я не могу входить в чат, из-за этого raz и # 243; n сейчас я не могу помогать пользователю...: ( – Jorgesys♦ 10.04.2016, 09:11
  • 3
    Проверять и # 233; твой случай в часы или в м и # 225; s опаздывать понедельник, я pondr и # 233; в контакте с Хуаном, чтобы видеть qu и # 233; возможно делать по этому поводу. –  10.04.2016, 09:26
  • 4
    Если они могут помогать мне быть и # 237; в превосходный, спасибо заранее!. – Jorgesys♦ 10.04.2016, 09:29
  • 5
    У меня нет проблемы, чтобы соглашаться на чат – adamista 10.04.2016, 13:53

Я добавляю новый ответ, так как издается вопрос, и он не соответствует первоначальной проблеме "Ошибка timeout, загрузив данные url android", сейчас проблема:

ExceptionIE:
org.bouncycastle.jce.exception. ExtCertPathValidatorException: Could not санкционируй тебя подтверди тебя signature. 04-04 17:55:12.647 3641-3705/es.proyecto E/AndroidRuntime: ФАТАЛЬНЫЙ EXCEPTION: AsyncTask

Восток ошибка может проистекать из различных причин, но хотя это будет ridГ-зад, может проистекать того, что твое устройство / участник соревнования конфигурировалось с часом и неправильной датой.

Я Думаю, что это проблема, так как у тебя сначала не было проблемы, прочитав файл, но если, чтобы это обрабатывать.

0
ответ дан 24.11.2019, 14:39
  • 1
    Я попытался менять дату и час и продолжи, что я остаюсь без можения. Prob и # 233; когда файл загружается прямо с устройства и он показывает мне, что разряд fall и # 243;. – adamista 12.04.2016, 11:04
  • 2
    пытаясь без ssl, я отношусь http:// tambi и # 233; n не удайся? – Jorgesys♦ 13.04.2016, 19:32
  • 3
    ДА, tambi и # 233; n не удайся – adamista 14.04.2016, 20:17
  • 4
    Привет @adamista, воспоминание у меня не было проблемы, загрузив .json, и ты также, когда ты загружал еще один .json, не согрешите и # 241; или, сейчас tambi и # 233; n у тебя будет та же проблема с одним согрешите и # 241; или? – Jorgesys♦ 14.04.2016, 20:30
  • 5
    Если, сейчас меня выполняет conexi и # 243; n, но он не читает всех данных и уже prob и # 233; чтобы сжимать их. Edit и # 233; мой вопрос, чтобы присоединять ошибку, которую он показывает мне в logCat – adamista 14.04.2016, 21:38

Теги

Похожие вопросы