我尝试做什么
我正在尝试为我的应用创建一个Loginmask。要检查userslogin是否正确,我创建一个HTTP-Post(JSON)到我的服务器,如果用户在db-table中,我会得到响应。
目前HTTP-POST dosn工作,我总是得到这个错误:
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-Path。
问题
就像你看到的那样,问题在于我无法建立网络连接。请告诉我我的代码中的错误在哪里,我可以修复它。
如果您可以为我提供一个很好的教程或代码示例,我也可以自己解决错误。
感谢您提前帮助。
在这里,您可以找到我的活动代码和我的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
答案 0 :(得分:4)
将“http://”添加到"api.i-v-o.ch"
所以它应该是:“http://api.i-v-o.ch”