2013-07-18 4 views
2

Я получаю следующее сообщение об ошибке, когда я попробовать модульные тесты запустить в Android - тесты, которые проходят при запуске вне Android:FileNotFoundException в Android с HttpURLConnection

07-18 15:43:44.816: W/System.err(545): uk.co.redfruit.libraries.srpDB.exceptions.SRBClientException: java.io.FileNotFoundExce$ 
07-18 15:43:44.816: W/System.err(545): at uk.co.redfruit.libraries.srpDB.SRPDBClient.getContent(SRPDBClient.java:116) 
07-18 15:43:44.816: W/System.err(545): at uk.co.monkeypower.android.straightrazordatabase.test.SRPDBClientTest.testGetConten$ 
07-18 15:43:44.826: W/System.err(545): at java.lang.reflect.Method.invokeNative(Native Method) 
07-18 15:43:44.826: W/System.err(545): at java.lang.reflect.Method.invoke(Method.java:507) 
07-18 15:43:44.826: W/System.err(545): at junit.framework.TestCase.runTest(TestCase.java:154) 
07-18 15:43:44.826: W/System.err(545): at junit.framework.TestCase.runBare(TestCase.java:127) 
07-18 15:43:44.826: W/System.err(545): at junit.framework.TestResult$1.protect(TestResult.java:106) 
07-18 15:43:44.826: W/System.err(545): at junit.framework.TestResult.runProtected(TestResult.java:124) 
07-18 15:43:44.826: W/System.err(545): at junit.framework.TestResult.run(TestResult.java:109) 
07-18 15:43:44.826: W/System.err(545): at junit.framework.TestCase.run(TestCase.java:118) 
07-18 15:43:44.826: W/System.err(545): at android.test.AndroidTestRunner.runTest(AndroidTestRunner.java:169) 
07-18 15:43:44.826: W/System.err(545): at android.test.AndroidTestRunner.runTest(AndroidTestRunner.java:154) 
07-18 15:43:44.826: W/System.err(545): at android.test.InstrumentationTestRunner.onStart(InstrumentationTestRunner.java:529) 
07-18 15:43:44.836: W/System.err(545): at android.app.Instrumentation$InstrumentationThread.run(Instrumentation.java:1448) 
07-18 15:43:44.836: W/System.err(545): Caused by: java.io.FileNotFoundException: http://straightrazorplace.com/srpwiki/index.$ 
07-18 15:43:44.836: W/System.err(545): at org.apache.harmony.luni.internal.net.www.protocol.http.HttpURLConnectionImpl.getIn$ 
07-18 15:43:44.836: W/System.err(545): at uk.co.redfruit.libraries.srpDB.SRPDBClient.getContent(SRPDBClient.java:106) 
07-18 15:43:44.836: W/System.err(545): ... 13 more 

Я знаю ошибку, которая появляется чтобы это произошло в Android 4.x +, но я получаю точно такую ​​же ошибку при работе в Gingerbread.

код, который вызывает ошибку следующим образом:

StringBuilder stringBuilder = null; 
     try { 
      URL url = new URL(targetURL); 
      HttpURLConnection connection = (HttpURLConnection) url.openConnection(); 
      connection.setRequestMethod("GET"); 
      connection.connect(); 
      BufferedReader reader = new BufferedReader(new InputStreamReader(
        connection.getInputStream())); 
      stringBuilder = new StringBuilder(); 
      String content = null; 
      while ((content = reader.readLine()) != null) { 
       stringBuilder.append(content + "\n"); 
      } 
      reader.close(); 
     } catch (IOException e) { 
      throw new SRBClientException(e); 
     } 

У меня есть разрешение INTERNET в мой манифест и URL существует - я могу получить доступ к нему в браузере. Может ли кто-нибудь увидеть, где я ошибаюсь или что мне не хватает?

Обновление: Я попытался использовать basic http client как попытку обхода проблемы. Это не сработало, но это привело к совершенно другой ошибке. Он показал, что я получаю 403, что в предыдущей попытке просто привело к FileNotFound, но на этот раз также вызвало исключение JSON, поскольку возвращаемое сообщение об ошибке html не могло (очевидно) анализироваться как JSON.

Я предполагаю, то, что это на стороне сервера вопрос, хотя я озадачен, почему я получаю 403 в Android, но ни в каком другом контексте ...

+0

можете ли вы связаться с targetURL в своем браузере? – Blackbelt

+0

да, могу. Кроме того, все тесты проходят при запуске в junit за пределами Android –

ответ

0

Оказывается, что сервер блокирует все, что агент пользователя по умолчанию не является (ничего, возможно?) И возвращался 403.

Установив его в стандартный агент пользователя браузера (в данном случае я использовал Chrome) его работал.

0

FileNotFoundException выбрасывается, когда сервер возвращает 404 (и другие коды). Я предполагаю, что ваш тест пытается достичь http://straightrazorplace.com/srpwiki/index.html, что дает мне 404 в Chrome.

+0

. Допустим, хотя на самом деле он нацелен на http://straightrazorplace.com/srpwiki/index.php?curid=3381&action=render, который не возвращает 404. Кроме того, как я уже сказал, эти тесты проходят в контексте, отличном от Android, то есть прямое junit. –

+0

Получает ли ваш сервер запрос (проверить журналы)? Если да, то он обслуживает ответ не 400? Возможно, URL-адрес искалечен. – mik3y

+0

Не имеют доступа к журналам сервера. Есть другой способ проверить. Используя отладку, URL-адрес выглядит отлично только до того, как будет предпринята попытка подключения. Очевидно, однако, что в процессе соединения может быть много возможностей для разрыва URL-адреса. –

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