服务抛出一个未知的主机异常Android应用程序

时间:2011-06-28 19:40:13

标签: java android httpwebrequest

我正在尝试检查每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时要对其进行三重检查。

为所有花时间回答并感谢您娱乐我的白痴的人提供赞成。

3 个答案:

答案 0 :(得分:4)

可能是因为您在清单中没有互联网访问权限?

<uses-permission android:name="android.permission.INTERNET" /> 

答案 1 :(得分:2)

WiFi或网络层可能正在进入休眠状态:当服务从警报中唤醒时,它可能需要等待几秒钟,直到网络层重新启动并重新建立通信,然后再尝试HTTP请求。

编辑:或者你可能需要使用唤醒锁来获取对wifi的访问并防止它进入睡眠状态。

答案 2 :(得分:2)

如果之前的答案都没有修复,那么,你是否在模拟器中运行它?模拟器中的网络层喜欢偶尔抛出这些错误,以使您感到困惑/沮丧。厚脸皮,那一个。重新启动它,一切都应该恢复正常。