UnknownHostException或IllegalStateException

时间:2011-10-26 11:51:50

标签: android url networking

我正在尝试使用以下代码从我的应用程序连接到服务器:

public void buildGamesList(View view){
String url = "http://somedomain.eu/blabla";
String response = "...";
try {
    HttpGet getRequest = new HttpGet(url);
    HttpClient client = new DefaultHttpClient();
    HttpResponse resp = client.execute(getRequest);
    response = responseToString(resp);
} catch (ClientProtocolException e1) {
    System.out.println("ClientProtocolException: " + e1.toString());
} catch (IOException e2) {
    System.out.println("IOException: " + e2.toString());
}
System.out.println("Response: " + response);
}

单击定义为

的图像按钮时会调用此方法
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent" android:weightSum="1">
    <ImageButton android:src="@drawable/logo" 
        android:id="@+id/logoButton" 
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content" 
        android:layout_marginTop="150dp" 
        android:layout_gravity="center" 
        android:onClick="buildGamesList"></ImageButton>      
</LinearLayout>

我遇到的问题是如果我写上面的url(带有一个前导的http://),我会得到UnknowHostException,如果我跳过领先的http://我得到一个java.lang.IllegalStateException:Target host不能为null,或者在参数中设置。

有人可以帮我理解这个吗?

Manifest文件的一部分:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
  package="com.jef.android"
  android:versionCode="1"
  android:versionName="1.0">
<uses-sdk android:minSdkVersion="10" />

<permission android:name="android.permission.INTERNET"></permission>
<uses_permission android:name="android.permission.INTERNET"></uses_permission>

<application android:icon="@drawable/icon" android:label="@string/app_name">
    <activity android:name=".GamesListActivity"
            android:permission="android.permission.INTERNET"
            android:screenOrientation="portrait"
            android:label="@string/app_name">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
    <activity android:name=".SettingsActivity"

4 个答案:

答案 0 :(得分:1)

您是否在AndroidManifest.xml中请求INTERNET权限?

答案 1 :(得分:0)

你会改变下面的代码吗?

之前:

 HttpGet getRequest = new HttpGet(url); 

后:

 HttpGet getRequest = new HttpGet(); 
 getRequest.setURI(new URI(url));

答案 2 :(得分:0)

我认为你没有使用http://somedomain.eu/blabla。如果是这样,您可能需要URLEncoder.encode()URL。

但是你可能有更好的运气使用URI(如IvoryCirrus建议的那样),如

URI uri = new URI(<your url>);
mRequest = new HttpGet(mUri);

我使用这个代码工作,并且在使用url字符串时似乎记得像你这样的问题。值得一试。请注意,在构造URI时,您仍然需要对url的非域部分进行编码 - 但这只会在您的GET到达服务器时出现问题。

答案 3 :(得分:0)

我自己发现了错误......

使用Eclipse进行开发,部分在我的PC上工作,当时间允许,部分在我的iMac上...似乎其中一个没有抱怨我的错字:

<uses_persmisson> should be <uses-permisson> in the Manifest file...

谢谢所有为你的思想力量做出贡献的人!