2011-12-27 18 views
1

我嘗試做目標主機的錯誤,而張貼的HTTP請求


我試圖創建一個Loginmask我的應用程序是什麼。要檢查一個userslogin是否正確,我創建一個HTTP-Post(JSON)到我的服務器,從那裏我得到響應,如果用戶在db-table中。

對於HTTP-POST不到風度工作的那一刻,我百達得到這個錯誤:

12-26 14:02:22.871: W/System.err(869): java.lang.IllegalStateException: Target host must not be null, or set in parameters. scheme=null, host=null, path=api.i-v-o.ch 

這似乎在我眼裏真的很奇怪,因爲我定義的URL路徑。

問題


就像你所看到的,問題是,我不能etablish網絡連接。請告訴我錯誤在我的代碼中,我可以修復它。

如果你能爲我提供一個很好的教程或代碼示例,我可以自己修復錯誤,那也是非常棒的。

Thx在您的幫助下提前。

在這裏你可以找到我的活動代碼和我的DataHandler。

LoginActivity.class:

package de.ivocore; 

import de.ivocore.service.DataHandler; 
import android.app.Activity; 
import android.os.Bundle; 
import android.view.View; 
import android.widget.Button; 
import android.widget.EditText; 
import android.widget.Toast; 

public class LoginActivity extends Activity { 

    public DataHandler JSONLogin = new DataHandler(); 


    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.login); 

     //Text-Felder 
     final EditText user = (EditText) findViewById(R.id.edt_username); 
     final EditText pwd = (EditText) findViewById(R.id.edt_password); 

     //Button 
     Button loginbt = (Button) findViewById(R.id.bt_login); 



     //OnClickListner für den Button definieren 
     loginbt.setOnClickListener(new View.OnClickListener(){ 

      public void onClick(View v){ 

       //Strings definieren 
       final String usertxt = user.getText().toString(); 
       final String pwdtxt = pwd.getText().toString(); 

       if (usertxt != null && pwdtxt != null){ 
       JSONLogin.JSONLogin(usertxt, pwdtxt); 
       }else{ 
        Toast.makeText(LoginActivity.this, "Bitte Username und Passwort eingeben!", Toast.LENGTH_SHORT); 
       } 
      } 
     }); 
    } 
} 

DataHandler.class

package de.ivocore.service; 

import java.io.BufferedReader; 
import java.io.InputStream; 
import java.io.InputStreamReader; 

import org.apache.http.HttpResponse; 
import org.apache.http.client.HttpClient; 
import org.apache.http.client.methods.HttpPost; 
import org.apache.http.entity.StringEntity; 
import org.apache.http.impl.client.DefaultHttpClient; 
import org.apache.http.message.BasicHeader; 
import org.apache.http.params.HttpConnectionParams; 
import org.apache.http.protocol.HTTP; 
import org.json.JSONObject; 

import android.os.Looper; 
import android.util.Log; 

public class DataHandler { 

    /** LOGIN-Methode 
    * Für diese Methode muss ein "final String username" sowie ein "final String password" mitgegeben werden 
    * Die Methode fürt die Login-Prozedur mit dem api.i-v-o.ch durch. 
    * Zurückgeben wird die Response welche vom Server kommt (Login erfolgreich oder nicht), sowie der Sessionkey. 
    * */ 
    public void JSONLogin(final String username, final String password){ 


     Thread t = new Thread(){               //Neuen Thread definieren 


      public void run(){                 //Startet automatisch wenn der Thread gestartet wird, führt die Funktion aus 


       String URL = "api.i-v-o.ch";               //URL definieren für JSON-Post 
       Looper.prepare();                  //Erstellt den Nachrichten-Pool 
       HttpClient client = new DefaultHttpClient();           //HttpClient definieren, handelt den http datenverkehr 
       HttpConnectionParams.setConnectionTimeout(client.getParams(), 10000);     //Timeout Limite 
       HttpResponse response;                 //HttpResponse definieren, handelt den http response 
       JSONObject login = new JSONObject();             //JSON-Object welches gesendet wird 

       try{ 
        HttpPost post = new HttpPost(URL);             //HttpPost definieren, handelt den http post 
        login.put("username", username);             //Füget dem JSONObject Login den Username ein 
        login.put("password", password);             //Fügt dem JSONObject Login das Passwort ein 

        StringEntity se = new StringEntity("Login" + login.toString());      //StringEntity definieren und StringEntity aus dem JSONObject Login erstellen 
        se.setContentEncoding(new BasicHeader(HTTP.CONTENT_TYPE, "application/json")); 
        post.setEntity(se);                 //Hier wird der Post an das IVO-Core gesendet 
        response = client.execute(post);             //Hier wird die Response abgefangen 


        /** Response-Checker 
        * Hier wird gecheckt was wir in der Response bekommen 
        */ 
        if(response != null){                //Hier wird geprüft ob etwas in der Response ist 

         StringBuilder sb = new StringBuilder();           //Stringbuilder um aus dem Response einen String zu erstellen 
         BufferedReader rd = new BufferedReader(new InputStreamReader(response.getEntity().getContent())); //response vom inputstreamreader lesen und in einen bufferedreader einfügen um diesen anschliessend zu einem string hinzuzuzfügen und in ein json object umwandeln 

         String line;                 //String definieren darin ist die später die response 
         while ((line = rd.readLine()) != null) {          //Hier wird definiert das der String Line den inhalt vom bufferedreader ist, der duchgand wird mit readLine durchgeführt 
          sb.append(line + "\n");              //Hier wird der string line nach \n gesplittet (newline) 
          } 

         String result;                 //String result definieren 
         result = sb.toString();               //Hier wird der inhalt vom Stringbuilder zum String result hinzugefühgt 
         Log.d("DataHandler", "Append String " + result);        //Gibt aus was im result drin ist 


        } 

       } catch(Exception e){ 
        e.printStackTrace(); 
        Log.e("DataHandler", "Cannot Estabilish Connection"); 
       } 
       Looper.loop();                   //Nachrichten loopen 
      } 
     }; 
     t.start();                      //Thread starten 
    } 

} 

logcat的:

12-26 14:00:29.331: W/System.err(869): java.lang.IllegalStateException: Target host must not be null, or set in parameters. scheme=null, host=null, path=api.i-v-o.ch 
12-26 14:00:29.331: W/System.err(869): at org.apache.http.impl.client.DefaultRequestDirector.determineRoute(DefaultRequestDirector.java:591) 
12-26 14:00:29.331: W/System.err(869): at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:293) 
12-26 14:00:29.331: W/System.err(869): at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:555) 
12-26 14:00:29.331: W/System.err(869): at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:487) 
12-26 14:00:29.331: W/System.err(869): at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:465) 
12-26 14:00:29.341: W/System.err(869): at de.ivocore.service.DataHandler$1.run(DataHandler.java:51) 
12-26 14:00:29.341: E/DataHandler(869): Cannot Estabilish Connection 
12-26 14:02:22.871: W/System.err(869): java.lang.IllegalStateException: Target host must not be null, or set in parameters. scheme=null, host=null, path=api.i-v-o.ch 
12-26 15:09:44.431: W/System.err(936): java.net.UnknownHostException: Unable to resolve host "api.i-v-o.ch": No address associated with hostname 
12-26 15:09:44.441: W/System.err(936): at java.net.InetAddress.lookupHostByName(InetAddress.java:426) 
12-26 15:09:44.441: W/System.err(936): at java.net.InetAddress.getAllByNameImpl(InetAddress.java:242) 
12-26 15:09:44.441: W/System.err(936): at java.net.InetAddress.getAllByName(InetAddress.java:220) 
12-26 15:09:44.441: W/System.err(936): at org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:137) 
12-26 15:09:44.441: W/System.err(936): at org.apache.http.impl.conn.AbstractPoolEntry.open(AbstractPoolEntry.java:164) 
12-26 15:09:44.451: W/System.err(936): at org.apache.http.impl.conn.AbstractPooledConnAdapter.open(AbstractPooledConnAdapter.java:119) 
12-26 15:09:44.451: W/System.err(936): at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:360) 
12-26 15:09:44.451: W/System.err(936): at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:555) 
12-26 15:09:44.481: W/System.err(936): at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:487) 
12-26 15:09:44.501: W/System.err(936): at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:465) 
12-26 15:09:44.501: W/System.err(936): at de.ivocore.service.DataHandler$1.run(DataHandler.java:51) 
12-26 15:09:44.501: W/System.err(936): Caused by: libcore.io.GaiException: getaddrinfo failed: EAI_NODATA (No address associated with hostname) 
12-26 15:09:44.511: W/System.err(936): at libcore.io.Posix.getaddrinfo(Native Method) 
12-26 15:09:44.511: W/System.err(936): at libcore.io.ForwardingOs.getaddrinfo(ForwardingOs.java:55) 
12-26 15:09:44.511: W/System.err(936): at java.net.InetAddress.lookupHostByName(InetAddress.java:411) 
12-26 15:09:44.511: W/System.err(936): ... 10 more 
12-26 15:09:44.511: E/DataHandler(936): Cannot Estabilish Connection 

回答

4

添加的 「http://」,以"api.i-v-o.ch"

所以它應該是: 「http://api.i-v-o.ch」