Jetzt kostenlos registrieren. Mitglieder surfen ohne Werbung auf Android-Hilfe.de!
Zurück   Android-Hilfe.de > Android Developer > Android App Entwicklung

Webdatenbank + JSON Webservice + ClientProtocolException

Das Thema "Webdatenbank + JSON Webservice + ClientProtocolException" befindet sich unter Android App Entwicklung auf Android-Hilfe.de.


Antwort

 

Themen-Optionen Ansicht
Alt 09.02.2012, 18:18   #1 (permalink)
Neuer Benutzer

Registriert seit: 08.06.2011
Beiträge: 2
Abgegebene Danke: 0
Erhielt 0 Danke für 0 Beiträge
Standard Webdatenbank + JSON Webservice + ClientProtocolException

Hallo

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));
	}
}
Thread:
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;
	}
	

}
PHP Script:
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();
    ?>
Odins Auge ist offline   Mit Zitat antworten
Alt 10.02.2012, 10:51   #2 (permalink)
Android-Hilfe.de Mitglied

Registriert seit: 06.10.2009
Beiträge: 60
Abgegebene Danke: 10
Erhielt 1 Danke für 1 Beitrag
Standard AW: Webdatenbank + JSON Webservice + ClientProtocolException

dein Apache werkelt auf Port 3306 ?
RED-BARON ist offline   Mit Zitat antworten
Alt 10.02.2012, 17:35   #3 (permalink)
Neuer Benutzer

Registriert seit: 08.06.2011
Beiträge: 2
Abgegebene Danke: 0
Erhielt 0 Danke für 0 Beiträge
Standard AW: Webdatenbank + JSON Webservice + ClientProtocolException

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.
Odins Auge ist offline   Mit Zitat antworten
Alt 10.02.2012, 17:36   #4 (permalink)
Android-Hilfe.de Mitglied
 
Benutzerbild von Sentence

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
Standard AW: Webdatenbank + JSON Webservice + ClientProtocolException

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;
        }
die ausgabe dann so
json_encode(array_utf8_encode_recursive($output));

MfG
Sentence ist offline   Mit Zitat antworten
Antwort

Stichworte
-

Themen-Optionen
Ansicht


Ähnliche Themen

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




Du liest gerade: "Webdatenbank + JSON Webservice + ClientProtocolException" unter "Android App Entwicklung" auf Android-Hilfe.de.


Powered by vBulletin®
Copyright ©2000 - 2012, vBulletin Solutions, Inc.
Search Engine Friendly URLs by vBSEO
© Android-Hilfe.de 2012 - All rights reserved.