2016-10-09 2 views
1

Извините за плохой английский.Иногда FileNotFoundException по адресу:

Моя проблема настолько похожа на эту проблему «FileNotFoundException at URL» , но иногда она дает ошибку и не продолжается, но иногда она отлично работает. Эта проблема возникает в первом соединении. Какая может быть проблема, которая заставляет ее работать иногда и иногда не работает?

10-10 02:19:41.128 9667-9819/? W/System.err﹕ java.io.FileNotFoundException: http://cdn59.my.mail.ru/v/59908302.mp4?slave[]=s%3Ahttp%3A%2F%2Fvideo-cephgw1.i%3A8080%2Frados%2F59908302-v&p=f&expire_at=1476068400&touch=1475880462&reg=76&sign=dd01f023e682705a105440ab5e93f5cb38cfeadd 
10-10 02:19:41.128 9667-9819/? W/System.err﹕ at com.android.okhttp.internal.http.HttpURLConnectionImpl.getInputStream(HttpURLConnectionImpl.java:186) 
10-10 02:19:41.128 9667-9819/? W/System.err﹕ at makgun.kturk.MRDownloader$1.doInBackground(MRDownloader.java:105) 
10-10 02:19:41.128 9667-9819/? W/System.err﹕ at makgun.kturk.MRDownloader$1.doInBackground(MRDownloader.java:39) 
10-10 02:19:41.128 9667-9819/? W/System.err﹕ at android.os.AsyncTask$2.call(AsyncTask.java:288) 
10-10 02:19:41.128 9667-9819/? W/System.err﹕ at java.util.concurrent.FutureTask.run(FutureTask.java:237) 
10-10 02:19:41.128 9667-9819/? W/System.err﹕ at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231) 
10-10 02:19:41.128 9667-9819/? W/System.err﹕ at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112) 
10-10 02:19:41.128 9667-9819/? W/System.err﹕ at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587) 
10-10 02:19:41.128 9667-9819/? W/System.err﹕ at java.lang.Thread.run(Thread.java:841) 

MRDownloader:

 @Override 
     protected String doInBackground(String... urls) { 

      try { 
       String path = Environment.getExternalStorageDirectory().getAbsolutePath() + "/" +name; 
       File file = new File(path); 
       int total; 
       if (file.exists())total=Integer.parseInt(String.valueOf(file.length())); 
       else total=0; 
       //New Added 
       if (urls[0].startsWith("//"))urls[0]="http:"+urls[0]; 
       //New Added finished 
       URL url = new URL(urls[0]); 
       HttpURLConnection urlConnection = (HttpURLConnection)url.openConnection(); 
       OutputStream output = new FileOutputStream(path, true); 
       urlConnection.addRequestProperty("Range", "bytes=" + file.length() + "-"); 
       if(!Cookie.isEmpty()) 
       urlConnection.addRequestProperty("Cookie", "video_key=" +Cookie); 
       urlConnection.setRequestProperty("User-Agent","Mozilla/5.0"); 
       urlConnection.setRequestProperty("Accept","*/*"); 
       urlConnection.setConnectTimeout(7000); 
       urlConnection.setReadTimeout(7000); 
       urlConnection.connect(); 

       int lenghtOfFile = urlConnection.getContentLength(); 
       PD.setMax(lenghtOfFile+total); 
       InputStream input = new BufferedInputStream(urlConnection.getInputStream()); 
       byte data[] = new byte[1024]; 
       // int total=Integer.parseInt(String.valueOf(file.length())); 
       int count; 
       Log.d("MakgunLENGHT-OF-FILE", Integer.toString(lenghtOfFile)); 

       while ((count = input.read(data)) != -1) { 
        total += count; 
        PD.setProgress(total); 
        output.write(data, 0, count); 
        if (pause){output.flush();output.close();input.close();if (PD.isShowing()) PD.dismiss();break;} 
       } 
       output.flush(); 
       output.close(); 
       input.close(); 

      } catch (MalformedURLException e) { 
       e.printStackTrace(); 
      } catch (IOException e1) { 
       e1.printStackTrace(); 
      } 
      return null; 
     } 

Вы можете использовать эту ссылку, чтобы попробовать. TryLink. Когда вы запрашиваете эту ссылку, она генерирует куки-файл cookie «video_key», а тело ответа содержит всю информацию, в которой вы нуждаетесь, как поток URL-адреса видео. Я не копирую весь файл java, поэтому, если вам нужно, я могу добавить еще. Благодарю.

+0

В настоящее время я успел это понять и, наконец, выяснил, почему и когда это происходит. Я хочу поделиться этим для других пользователей. Почему это происходит, когда сервер отправляет неверный запрос и для этого сайта иногда отправляет Service Unavaible 503 и этот отказ кода. Но добавив условие повторить максимум 10 раз, он работает как шарм. По крайней мере один клик достаточно, и он повторяется максимум 10 раз, и обычно он получает 2xx код ответа с сервера через 2-3 раза. Если полученный код 2xx прерывает цикл. И он больше не перезагружается. Это решило мою проблему. – makgun

ответ

0

В настоящее время я успел это понять и, наконец, выяснил, почему и когда это происходит. Я хочу поделиться этим для других пользователей. Его причина в том, что происходит каждый раз, когда сервер отправляет неверный запрос и для этого сайта иногда отправляет «Сервис Unavaible 503» и этот отказ кода. Но добавив условие повторить максимум 10 раз он работает как шарм. По крайней мере один клик достаточно, и он повторяется максимум 10 раз, и обычно получает код ответа 2xx с сервера после того, как 2-3 раза попробовал. Если полученный код 2xx прерывает цикл. И он больше не перезагружается. Это решило мою проблему.

int x = 1; 
while (true) { 
    //otherStuffs... 
    if (responseCode == 503) { 
    Log.d("makgunResponseCode503", "Now ResponseCode is 503 repeating " + x + " times"); 
    x++; 
    } 
    else 
    {Log.d("makgunResponseCode", "ResponseCode is: " + responseCode);break} 
    if (x > 10) break; 
} 
+0

Также вы можете найти [HTTP_STATUS_CODE] (https://en.wikipedia.org/wiki/List_of_HTTP_status_codes#5xx_Server_Error) – makgun

Смежные вопросы