我正在尝试使用以下代码从我的应用程序连接到服务器:
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"
答案 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...
谢谢所有为你的思想力量做出贡献的人!