安卓系统无法解析主机名

8

我是Android的新手,所以这个问题可能有一个简单的答案(我可能错过了什么)。我正在尝试使用Google的Resting框架制作REST客户端(因为Jersey似乎不起作用)。当我尝试运行客户端时,我得到了这个警告:

W/System.err(728): java.net.UnknownHostException: Unable to resolve host "my.ip:8080": No address associated with hostname

然后我得到了一些异常,但我想这是根本原因。

我已经拥有了互联网权限:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.maze.client"
android:versionCode="1"
android:versionName="1.0" >

<uses-sdk android:minSdkVersion="15" />
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />


<application
    android:icon="@drawable/ic_launcher"
    android:label="@string/app_name" >
    <activity
        android:name=".RestingClientActivity"
        android:label="@string/app_name" >
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
</application>

</manifest>

如果您需要任何额外的信息,请告诉我。

  • 在警告中,我用“mi.ip”替换了我的IP地址(这是有意为之的,但在原始文本中是正确的)。

1
你尝试过重新启动模拟器吗?我也遇到过这个异常,但是重新启动模拟器后问题就解决了。如果你还没有尝试过,可以试一下。 - Nixit Patel
@NixitPatel 我已经重启模拟器多次,然后也重启了Eclipse,但我仍然一直收到这个错误。 - Dragos
尝试在设备上运行它;有时模拟器会出问题。我知道我在模拟器上流式传输.mjpeg文件时遇到了类似的问题;在模拟器上崩溃,但在我的设备上完美运行。 - TJ Biddle
@TJBiddle 我没有智能手机。我知道为一个我没有的东西制作应用程序很奇怪。 :D - Dragos
其余的评论都是正确的:当您尝试进行网络连接时,名称解析是发生的第一件事。这条消息很可能与DNS无关。它可能只是意味着您根本没有网络连接。尝试在AVD上运行浏览器。它能工作吗?接下来尝试使用AVD上的浏览器连接到目标机器。这应该可以帮助您确定问题出在哪里... - G. Blake Meike
显示剩余5条评论
2个回答

1
如果您发布连接到服务器的代码片段,我们将更容易地帮助您。 但是,可能您的问题在于创建要调用的URI。例如:
URI uri = URIUtils.createURI("http", "your-ip", 8080, "/path/to/webservice", 
        URLEncodedUtils.format(params, "UTF-8"), null);
HttpClient client = new DefaultHttpClient();
HttpGet get = new HttpGet(uri);
response = client.execute(get);

因此,如果您使用无效或错误的URI调用execute方法,则可能会遇到问题。

有时,当您保持AVD打开并更改正在使用的网络时,例如,离开办公室并开始使用家庭WiFi,您可能会遇到像您目前遇到的这样的问题。


0

我相信我遇到了与OP相同的问题,我知道这是一个旧问题,但仍然会发布我的发现。

问题在于Resting框架方法(如get())通过其连接助手传递url,并期望您将端口作为第二个参数提供。

因此,以OP的示例为例,不是:

Resting.get('my.ip:8080');

你的调用应该是:

Resting.get('my.ip', 8080)

希望能对某人有所帮助 :)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接