Служба выбрасывает Android-приложение «Неизвестное хост-исключение» - PullRequest
1 голос
/ 28 июня 2011

Я пытаюсь проверить переменное количество сайтов в сервисе, которое каждые 15 минут просыпается по тревоге.Проблема, с которой я сталкиваюсь, заключается в том, что, когда я запускаю службу для проверки веб-сайтов, она дает мне java.net.UnknownHostException для веб-сайта, который, как я знаю, хорош.Perhpas Я не до конца понимаю ошибку, которая выкладывается, но я не уверен, почему код вызывает у меня такую ​​проблему.

Вот стек:

06-28 19:30:06.270: WARN/System.err(560): java.net.UnknownHostException: http://www.cnn.com/
06-28 19:30:06.480: WARN/System.err(560):     at java.net.InetAddress.lookupHostByName(InetAddress.java:513)
06-28 19:30:06.480: WARN/System.err(560):     at java.net.InetAddress.getAllByNameImpl(InetAddress.java:280)
06-28 19:30:06.490: WARN/System.err(560):     at java.net.InetAddress.getByName(InetAddress.java:310)
06-28 19:30:06.520: WARN/System.err(560):     at com.myapp.tracker.Listen.checkWebsite(Listen.java:102)
06-28 19:30:06.520: WARN/System.err(560):     at com.myapp.tracker.Listen.onStartCommand(Listen.java:64)
06-28 19:30:06.520: WARN/System.err(560):     at android.app.ActivityThread.handleServiceArgs(ActivityThread.java:3053)
06-28 19:30:06.530: WARN/System.err(560):     at android.app.ActivityThread.access$3600(ActivityThread.java:125)
06-28 19:30:06.530: WARN/System.err(560):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2096)
06-28 19:30:06.530: WARN/System.err(560):     at android.os.Handler.dispatchMessage(Handler.java:99)
06-28 19:30:06.530: WARN/System.err(560):     at android.os.Looper.loop(Looper.java:123)
06-28 19:30:06.550: WARN/System.err(560):     at android.app.ActivityThread.main(ActivityThread.java:4627)
06-28 19:30:06.550: WARN/System.err(560):     at java.lang.reflect.Method.invokeNative(Native Method)
06-28 19:30:06.550: WARN/System.err(560):     at java.lang.reflect.Method.invoke(Method.java:521)
06-28 19:30:06.550: WARN/System.err(560):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
06-28 19:30:06.550: WARN/System.err(560):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
06-28 19:30:06.550: WARN/System.err(560):     at dalvik.system.NativeStart.main(Native Method)

Вот код:

public void checkWebsite(Intent intent) throws Exception {
    BufferedReader in = null;
    try {
        Bundle bundle = intent.getExtras();
        int [] checkboxes = bundle.getIntArray("checkboxes");
        if( checkboxes[0] == 0){
            String failure = "******FAILURE VALUE = 0";
            Log.d(TRACKER_DEBUGGING, failure);  
        }
        String [] websites = bundle.getStringArray("websites");
        if( websites[0] == null){
            String failure = "******FAILURE VALUE = null";
            Log.d(TRACKER_DEBUGGING, failure);  
        }
        for(int i = 0; i < 3; i++ ){
            HttpClient client = new DefaultHttpClient();
            HttpGet request = new HttpGet();

            if( checkboxes[i] == 1 ){
                request.setURI(new URI(websites[i]));
                Log.d(TRACKER_DEBUGGING, websites[i]);

                // this line right here is throwing the error
                HttpResponse response = client.execute(request);

// more code after this but it never reaches this point or executes any of it

Я очень озадачен тем, почему это происходит.Я думаю, я не очень хорошо знаком с запросами Http, но я чувствую, что это должно работать.

РЕДАКТИРОВАТЬ *****: я поклялся, чтоЯ добавил разрешение на использование Интернета, но на самом деле я его не добавил.Теперь я знаю, что могу в три раза проверить это, когда столкнусь с UnknownHostException в будущем.

Upvotes за все, что нашли время ответить, и спасибо за то, что развлекаете мой идиотизм.

Ответы [ 3 ]

4 голосов
/ 28 июня 2011

Может быть потому, что у вас нет доступа к Интернету в манифесте?

<uses-permission android:name="android.permission.INTERNET" /> 
2 голосов
/ 29 июня 2011

Если ни один из предыдущих ответов не исправил это, то вы запускаете это в эмуляторе? Сетевой уровень в эмуляторе любит время от времени выдавать эти ошибки, чтобы сбить вас с толку. Нахальный, тот. Перезапустите его, и все должно вернуться к нормальной жизни.

2 голосов
/ 29 июня 2011

Уровень Wi-Fi или сетевой режим может переходить в спящий режим: когда служба выходит из режима тревоги, может потребоваться подождать несколько секунд, пока сетевой уровень не восстановится и не восстановит связь, прежде чем пытаться выполнить запрос HTTP.

РЕДАКТИРОВАТЬ: в качестве альтернативы вам может понадобиться использовать функцию пробуждения, чтобы получить доступ к Wi-Fi и предотвратить его засыпание.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...