| |||||||
Das Thema "Webdatenbank + JSON Webservice + ClientProtocolException" befindet sich unter Android App Entwicklung auf Android-Hilfe.de.
|
| | Themen-Optionen | Ansicht |
| | #1 (permalink) |
| Neuer Benutzer Registriert seit: 08.06.2011
Beiträge: 2
Abgegebene Danke: 0
Erhielt 0 Danke für 0 Beiträge
| Ich möchte Daten an eine Webdatenbank (mysql + apache) sicken und sie von dort abrufen. Als Ansatz habe ich die Rest Webservice Tutorials hergenommen und die mit AsyncTask erweitert. Mein Problem ist, ich bekomme beim Verbindungsaufbau eine ClientProtocolException mit der Meldung: The server failed to respond with a valid http response. Ich habe verschiedene Tutorials ausprobiert aber an der Fehlermeldung hat sich nichts geändert, ich habe auch zu dieser Fehlermeldung nichts brauchbares finden können, hat jemand eine Ahnung wo der Fehler liegt? Der Server ist eine lokale Linux-Maschine, mein Nexus S befindet sich ebenfalls per WLAN im lokalen Netz und das PHP script lässt sich im Browser problemlos öffnen. Hier der Code: Activity Code: package at.vikingstudios.androidtest;
import java.util.ArrayList;
import java.util.concurrent.ExecutionException;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import android.app.ListActivity;
import android.os.AsyncTask;
import android.os.Bundle;
import android.util.Log;
import android.widget.ArrayAdapter;
public class AndroidTestActivity extends ListActivity
{
ArrayList<String> results = new ArrayList<String>();
JSONObject json_data;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
getData();
}
private void getData() {
String url;
String result = "";
AsyncTask<String, Void, String> ds;
try {
url = "http://192.168.1.102:3306" + System.getProperty("file.separator") + "androidtest.php";
ds = new DataSucker().execute(url);
result = ds.get();
} catch (InterruptedException ie)
{
Log.e("log_tag", "Error thread interrupted: "+ie.toString());
} catch (ExecutionException ee)
{
Log.e("log_tag", "Error on execution: "+ee.toString());
}
try
{
JSONArray jArray = new JSONArray(result);
for(int i=0;i<jArray.length();i++)
{
json_data = jArray.getJSONObject(i);
results.add((String) json_data.get("id") + " "+ json_data.get("name"));
Log.d("debug", (String) json_data.get("id") + " "+ json_data.get("name"));
}
fillList();
} catch(JSONException e)
{
Log.e("log_tag", "Error parsing data "+e.toString());
}
}
public void fillList()
{
this.setListAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, results));
}
} Code: package at.vikingstudios.androidtest;
import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;
import android.os.AsyncTask;
import android.util.Log;
public class DataSucker extends AsyncTask<String, Void, String>
{
InputStream is;
@Override
protected String doInBackground(String... urls) {
String result = "";
//ArrayList<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();
try
{
HttpClient httpclient = new DefaultHttpClient();
HttpGet httpget = new HttpGet("http://192.168.1.102:3306" + System.getProperty("file.separator") + "androidtest.php");
//httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
httpget.setHeader("Accept", "application/json");
httpget.setHeader("Content-type", "application/json");
HttpResponse response = httpclient.execute(httpget);
Log.e("log_tag", response.getStatusLine().toString());
HttpEntity entity = response.getEntity();
is = entity.getContent();
} catch (ClientProtocolException ce)
{
Log.e("log_tag", "Fehler bei der http Verbindung "+ce.toString()+ ce.getCause());
} catch(Exception e)
{
Log.e("log_tag", "Fehler bei der http Verbindung "+e.toString());
}
try
{
BufferedReader reader = new BufferedReader(new InputStreamReader(is,"iso-8859-1"),8);
StringBuilder sb = new StringBuilder();
String line = null;
while ((line = reader.readLine()) != null)
{
sb.append(line + "n");
}
is.close();
result=sb.toString();
} catch(Exception e)
{
Log.e("log_tag", "Error converting result "+e.toString());
}
return result;
}
} Code: <?php
mysql_connect("localhost","android","and123");
mysql_select_db("androidtest");
$q=mysql_query("SELECT * FROM androidtest");
while($e=mysql_fetch_assoc($q))
$output[]=$e;
print(json_encode($output));
mysql_close();
?> |
| | |
| | #3 (permalink) |
| Neuer Benutzer Registriert seit: 08.06.2011
Beiträge: 2
Abgegebene Danke: 0
Erhielt 0 Danke für 0 Beiträge
|
Ach herrje ich hab den Wald vor lauter Bäumen nicht gesehen, natürlich ist der Port 3306 der MySql Port und nicht der vom Apache. Vielen Dank. |
| | |
| | #4 (permalink) |
| Android-Hilfe.de Mitglied Modell: Defy, Xoom, Sony Tablet s Registriert seit: 27.01.2011
Beiträge: 111
Abgegebene Danke: 20
Erhielt 23 Danke für 20 Beiträge
|
Moin, du sagst mittels httpget.setHeader("Accept", "application/json"); das du nur JSON dateien akzeptierst. PHP liefert standardmäßig aber text/html aus. Vielleicht hilft in der php der entsprechende header header("Content-type: application/json; charset=utf-8"); Außerdem musst du die ausgabe von json_encode noch utf8 kodieren, sonst wird es an umlauten scheitern. Da hab ich ne kleine Funktion für Code: function array_utf8_encode_recursive($dat)
{ if (is_string($dat)) {
return utf8_encode($dat);
}
if (is_object($dat)) {
$ovs= get_object_vars($dat);
$new=$dat;
foreach ($ovs as $k =>$v) {
$new->$k=array_utf8_encode_recursive($new->$k);
}
return $new;
}
if (!is_array($dat)) return $dat;
$ret = array();
foreach($dat as $i=>$d) $ret[$i] = array_utf8_encode_recursive($d);
return $ret;
} json_encode(array_utf8_encode_recursive($output)); MfG |
| | |
![]() |
|
| Themen-Optionen | |
| Ansicht | |
| |
| ||||
| Thema | Autor | Forum | Antworten | Letzter Beitrag |
| Webservice Prinzip | imoney91 | Android App Entwicklung | 3 | 16.01.2012 11:50 |
| Zeichenkodierung in JSon | samarek | Android App Entwicklung | 3 | 07.11.2011 16:51 |
| dotNet-WebService Problem | Neeldarax | Android App Entwicklung | 5 | 19.10.2011 15:17 |
| JSON parsen | Wojtek | Android App Entwicklung | 3 | 12.05.2011 17:46 |
| JSON Marshaller | ko5tik | Android App Entwicklung | 1 | 02.03.2010 21:32 |