UnknownHostException или IllegalStateException - PullRequest
1 голос
/ 26 октября 2011

Я пытаюсь подключиться к серверу из моего приложения, используя следующий код:

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: целевой хост не может быть нулевым или заданным в параметрах.

Может ли кто-нибудь помочь мне понять это?

Часть файла манифеста:

<?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 ]

1 голос
/ 26 октября 2011

Требуете ли вы разрешение ИНТЕРНЕТ в AndroidManifest.xml?

0 голосов
/ 31 октября 2011

Я сам нашел ошибку ...

Разработка выполняется с использованием Eclipse, частично на моем ПК на работе, когда позволяет время, и частично дома на моем iMac ... кажется, что один из них не жаловался на мою опечатку:

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

Спасибо всем, кто внес свой умственный вклад!

0 голосов
/ 26 октября 2011

Я полагаю, что вы не используете http://somedomain.eu/blabla. Если это так, вам может понадобиться URLEncoder.encode () URL.

Но вам может повезти, если вы используете URI (как предлагает IvoryCirrus) в качествев

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

У меня есть код, работающий с этим, и, похоже, я помню такие же проблемы, как ваша, когда напрямую использовал строку URL.Стоит попробовать.Обратите внимание, что вам все еще нужно кодировать не доменную часть URL при создании URI - но это будет проблемой только тогда, когда ваш GET попадет на ваш сервер.

0 голосов
/ 26 октября 2011

измените ли вы код ниже?

до:

 HttpGet getRequest = new HttpGet(url); 

после:

 HttpGet getRequest = new HttpGet(); 
 getRequest.setURI(new URI(url));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...