【问题标题】:Service throwing an Unknown Host Exception Android App服务抛出未知主机异常 Android 应用程序
【发布时间】:2011-09-24 15:01:56
【问题描述】:

我正在尝试检查服务中的可变数量的网站,该服务每 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 请求并不是很熟悉,但我觉得这应该可行。

EDIT*****:我发誓我已经添加了使用互联网权限,但我实际上并没有添加它。现在我知道在将来遇到 UnknownHostException 时要三重检查。

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

【问题讨论】:

    标签: java android httpwebrequest


    【解决方案1】:

    可能是因为清单中您没有 Internet 访问权限?

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

    【讨论】:

    • 权限在清单中。以前的版本正在运行。
    【解决方案2】:

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

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

    【讨论】:

    • 我唯一能想到的是您的websites[i] 变量不是正确的URL。
    【解决方案3】:

    如果以前的答案都没有解决它,那么,你是在模拟器中运行它吗?模拟器中的网络层喜欢每隔一段时间抛出这些错误来迷惑/挫败你。厚脸皮,那个重新启动它,一切都应该恢复正常。

    【讨论】:

    • 我一直在模拟器上进行测试,所以接下来我将在我的机器人上进行测试。如果模拟器不能工作,但设备能工作,那肯定会更糟,从开发的角度来看,当然不是部署。
    • 在我的机器人上进行测试在 LogCat 中给了我完全相同的错误
    猜你喜欢
    • 1970-01-01
    • 2013-05-29
    • 1970-01-01
    • 2023-03-06
    • 1970-01-01
    • 2018-09-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多