Daten aus MYSQL Datenbank auslesen

W

wiesel32

Neues Mitglied
0
Hallo,

könnte mir jemand einen Tip geben wie ich mit Android zu einer mySQL Datenbank connecten kann um einen einfachen Datensatz auszulesen..

Danke im Voraus


wiesel25
 
wo willst du denn connecten? redest du von datanbanken auf dem gerät oder im web?

cheers
 
Natürlich im web..

Gruss
 
wie ich finde die eleganteste lösung ist über eine REST Api, quasi eine Datenschnittstelle die du selbst entwickelst. nehmen wir an

www.deineseite.de/rest/

diese domain zeigt auf deinen webspace und zwar auf das verzeichnis /rest.
dort legst du php(whatever) skripte ab. Z.B.

www.deineseite.de/rest/getAllLinks.php

Würdest du diese Seite aufrufen würde dir im Browser z.B. Xml oder Json mit dem content ausgegeben werden. wie du das entwickelst ist aber deine sache.

Dann im Android einfach über DefaultHttpClient Url aufrufen, Daten verarbeite und fertig, Threading nicht vergessen ;) post

...für eine demo app brauchst du das threading aber net eig^^

hier steht alles nochmal beschrieben link

cheers
 
Hi,

danke für die Info und den Link.

Versuche das ganze aus dem Link umzusetzen und Daten aud meiner mySQL DB auszulesen.

Habe auf meinem Webserver ein php File angelegt:

PHP:
<?php
mysql_connect("localhost","root","admin");
mysql_select_db("PeopleData");
 
$q=mysql_query("SELECT * FROM people WHERE birthyear>'".$_REQUEST['year']."'");
while($e=mysql_fetch_assoc($q))
        $output[]=$e;
 
print(json_encode($output));
 
mysql_close();
?>


Versuche jetz über mein Desire an diese Daten zu kommen:


Code:
[SIZE=2]EditText nameField2 = (EditText) findViewById(R.id.[/SIZE]
[LEFT][I][SIZE=2][COLOR=#0000c0][SIZE=2][COLOR=#0000c0]name_field2[/COLOR][/SIZE][/COLOR][/SIZE][/I][SIZE=2]);[/SIZE]

[SIZE=2]EditText [U]nameField1[/U] = (EditText) findViewById(R.id.[/SIZE][I][SIZE=2][COLOR=#0000c0][SIZE=2][COLOR=#0000c0]name_field[/COLOR][/SIZE][/COLOR][/SIZE][/I][SIZE=2]);[/SIZE][/LEFT]

 

[LEFT][SIZE=2]String result = [/SIZE][SIZE=2][COLOR=#2a00ff][SIZE=2][COLOR=#2a00ff]""[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2];[/SIZE]
[LEFT][SIZE=2][COLOR=#3f7f5f][SIZE=2][COLOR=#3f7f5f]//the year data to send[/COLOR][/SIZE][/COLOR][/SIZE]
[SIZE=2]ArrayList<NameValuePair> nameValuePairs = [/SIZE][/LEFT]
[/LEFT]

 
[LEFT][B][SIZE=2][COLOR=#7f0055][SIZE=2][COLOR=#7f0055]new[/COLOR][/SIZE][/COLOR][/SIZE][/B][SIZE=2] ArrayList<NameValuePair>();[/SIZE]

[SIZE=2]nameValuePairs.add([/SIZE][B][SIZE=2][COLOR=#7f0055][SIZE=2][COLOR=#7f0055]new[/COLOR][/SIZE][/COLOR][/SIZE][/B][SIZE=2] BasicNameValuePair([/SIZE][SIZE=2][COLOR=#2a00ff][SIZE=2][COLOR=#2a00ff]"year"[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2],[/SIZE][SIZE=2][COLOR=#2a00ff][SIZE=2][COLOR=#2a00ff]"1980"[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2]));[/SIZE][/LEFT]

 

[LEFT][SIZE=2][COLOR=#3f7f5f][SIZE=2][COLOR=#3f7f5f]//[U]http[/U] post[/COLOR][/SIZE][/COLOR][/SIZE]
[LEFT][B][SIZE=2][COLOR=#7f0055][SIZE=2][COLOR=#7f0055]try[/COLOR][/SIZE][/COLOR][/SIZE][/B][SIZE=2]{[/SIZE]
[SIZE=2]HttpClient httpclient = [/SIZE][B][SIZE=2][COLOR=#7f0055][SIZE=2][COLOR=#7f0055]new[/COLOR][/SIZE][/COLOR][/SIZE][/B][SIZE=2] DefaultHttpClient();[/SIZE]
[SIZE=2]HttpPost httppost = [/SIZE][B][SIZE=2][COLOR=#7f0055][SIZE=2][COLOR=#7f0055]new[/COLOR][/SIZE][/COLOR][/SIZE][/B][SIZE=2] HttpPost([/SIZE][SIZE=2][COLOR=#2a00ff][SIZE=2][COLOR=#2a00ff]"http://192.168.2.2/android_mysql.php"[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2]);[/SIZE]
[SIZE=2]httppost.setEntity([/SIZE][B][SIZE=2][COLOR=#7f0055][SIZE=2][COLOR=#7f0055]new[/COLOR][/SIZE][/COLOR][/SIZE][/B][SIZE=2] UrlEncodedFormEntity(nameValuePairs));[/SIZE]
[SIZE=2]HttpResponse response = httpclient.execute(httppost); [/SIZE]
[SIZE=2]HttpEntity entity = response.getEntity();[/SIZE]
[SIZE=2]InputStream [U]is[/U] = entity.getContent();[/SIZE]
[SIZE=2]}[/SIZE][B][SIZE=2][COLOR=#7f0055][SIZE=2][COLOR=#7f0055]catch[/COLOR][/SIZE][/COLOR][/SIZE][/B][SIZE=2](Exception e){[/SIZE]
Log.e("log_tag", "Error in http connection "+e.toString());
[SIZE=2]nameField2.setText([/SIZE][SIZE=2][COLOR=#2a00ff][SIZE=2][COLOR=#2a00ff]"HTTP Verbindungsfehler"[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2]);[/SIZE]
[SIZE=2]}[/SIZE]
[SIZE=2][COLOR=#3f7f5f][SIZE=2][COLOR=#3f7f5f]//convert response to string[/COLOR][/SIZE][/COLOR][/SIZE]
[B][SIZE=2][COLOR=#7f0055][SIZE=2][COLOR=#7f0055]try[/COLOR][/SIZE][/COLOR][/SIZE][/B][SIZE=2]{[/SIZE]
[SIZE=2]BufferedReader reader = [/SIZE][B][SIZE=2][COLOR=#7f0055][SIZE=2][COLOR=#7f0055]new[/COLOR][/SIZE][/COLOR][/SIZE][/B][SIZE=2] BufferedReader([/SIZE][B][SIZE=2][COLOR=#7f0055][SIZE=2][COLOR=#7f0055]new[/COLOR][/SIZE][/COLOR][/SIZE][/B][SIZE=2] InputStreamReader([/SIZE][SIZE=2][COLOR=#0000c0][SIZE=2][COLOR=#0000c0]is[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2],[/SIZE][SIZE=2][COLOR=#2a00ff][SIZE=2][COLOR=#2a00ff]"iso-8859-1"[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2]),8);[/SIZE]
[SIZE=2]StringBuilder sb = [/SIZE][B][SIZE=2][COLOR=#7f0055][SIZE=2][COLOR=#7f0055]new[/COLOR][/SIZE][/COLOR][/SIZE][/B][SIZE=2] StringBuilder();[/SIZE]
[SIZE=2]String line = [/SIZE][B][SIZE=2][COLOR=#7f0055][SIZE=2][COLOR=#7f0055]null[/COLOR][/SIZE][/COLOR][/SIZE][/B][SIZE=2];[/SIZE]
[B][SIZE=2][COLOR=#7f0055][SIZE=2][COLOR=#7f0055]while[/COLOR][/SIZE][/COLOR][/SIZE][/B][SIZE=2] ((line = reader.readLine()) != [/SIZE][B][SIZE=2][COLOR=#7f0055][SIZE=2][COLOR=#7f0055]null[/COLOR][/SIZE][/COLOR][/SIZE][/B][SIZE=2]) {[/SIZE]
[SIZE=2]sb.append(line + [/SIZE][SIZE=2][COLOR=#2a00ff][SIZE=2][COLOR=#2a00ff]"\n"[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2]);[/SIZE]
[SIZE=2]}[/SIZE]
[SIZE=2][COLOR=#0000c0][SIZE=2][COLOR=#0000c0]is[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2].close();[/SIZE][/LEFT]
[/LEFT]

 

[LEFT][SIZE=2]result=sb.toString();[/SIZE][/LEFT]

 

[LEFT][SIZE=2]}[/SIZE][B][SIZE=2][COLOR=#7f0055][SIZE=2][COLOR=#7f0055]catch[/COLOR][/SIZE][/COLOR][/SIZE][/B][SIZE=2](Exception e){[/SIZE]
Log.e("log_tag", "Error converting result "+e.toString());

[SIZE=2]nameField2.setText([/SIZE][SIZE=2][COLOR=#2a00ff][SIZE=2][COLOR=#2a00ff]"Konvertierungsfehler"[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2]);[/SIZE]
[SIZE=2]}[/SIZE]
[SIZE=2][COLOR=#3f7f5f][SIZE=2][COLOR=#3f7f5f]//parse [U]json[/U] data[/COLOR][/SIZE][/COLOR][/SIZE]
[B][SIZE=2][COLOR=#7f0055][SIZE=2][COLOR=#7f0055]try[/COLOR][/SIZE][/COLOR][/SIZE][/B][SIZE=2]{[/SIZE]
[SIZE=2]JSONArray jArray = [/SIZE][B][SIZE=2][COLOR=#7f0055][SIZE=2][COLOR=#7f0055]new[/COLOR][/SIZE][/COLOR][/SIZE][/B][SIZE=2] JSONArray(result);[/SIZE]
[B][SIZE=2][COLOR=#7f0055][SIZE=2][COLOR=#7f0055]for[/COLOR][/SIZE][/COLOR][/SIZE][/B][SIZE=2]([/SIZE][B][SIZE=2][COLOR=#7f0055][SIZE=2][COLOR=#7f0055]int[/COLOR][/SIZE][/COLOR][/SIZE][/B][SIZE=2] i=0;i<jArray.length();i++){[/SIZE]
[SIZE=2]JSONObject json_data = jArray.getJSONObject(i);[/SIZE]
[SIZE=2]Log.[I]i[/I]([/SIZE][SIZE=2][COLOR=#2a00ff][SIZE=2][COLOR=#2a00ff]"log_tag"[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2],[/SIZE][SIZE=2][COLOR=#2a00ff][SIZE=2][COLOR=#2a00ff]"id: "[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2]+json_data.getInt([/SIZE][SIZE=2][COLOR=#2a00ff][SIZE=2][COLOR=#2a00ff]"id"[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2])+[/SIZE]
[SIZE=2][COLOR=#2a00ff][SIZE=2][COLOR=#2a00ff]", name: "[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2]+json_data.getString([/SIZE][SIZE=2][COLOR=#2a00ff][SIZE=2][COLOR=#2a00ff]"name"[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2])+[/SIZE]
[SIZE=2][COLOR=#2a00ff][SIZE=2][COLOR=#2a00ff]", sex: "[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2]+json_data.getInt([/SIZE][SIZE=2][COLOR=#2a00ff][SIZE=2][COLOR=#2a00ff]"sex"[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2])+[/SIZE]
[SIZE=2][COLOR=#2a00ff][SIZE=2][COLOR=#2a00ff]", birthyear: "[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2]+json_data.getInt([/SIZE][SIZE=2][COLOR=#2a00ff][SIZE=2][COLOR=#2a00ff]"birthyear"[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2]));[/SIZE][/LEFT]

[SIZE=2]}[/SIZE]
 

[LEFT][SIZE=2]}[/SIZE][B][SIZE=2][COLOR=#7f0055][SIZE=2][COLOR=#7f0055]catch[/COLOR][/SIZE][/COLOR][/SIZE][/B][SIZE=2](JSONException e){[/SIZE]
Log.e("log_tag", "Error parsing data "+e.toString());

[SIZE=2]nameField2.setText([/SIZE][SIZE=2][COLOR=#2a00ff][SIZE=2][COLOR=#2a00ff]"Fehler beim parsen der Daten"[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2]);[/SIZE][/LEFT]

[SIZE=2]}[/SIZE]
 

[LEFT][SIZE=2]}[/SIZE]

[SIZE=2]}[/SIZE][/LEFT]



Wie komme ich an die Daten so dass ich diese Dann auf dem Display ausgeben kann...?​

Vielleicht kann mir jemand Dabei helfen ....​


Gruss​

wiesel32​
 
Zuletzt bearbeitet:
funktioniert denn soweit alles? bekommst du die daten im log angezeigt?

naja ich würde das so machen. eine Klasse zb. JsonDownloader. Die Fähigkeit Web Content herunterzuladen wollen wir ja nicht unbedingt an die Existenz eines Objektes binden, deshalb implementieren wir eine static method

Code:
public class JsonDownloader{

   public static String getData(...){

    String result = "";

    return result;
   }

}

...so könntest du überall einfach JsonDownloader.getData(parameter) schreiben.

Wenn wir davon ausgehen das result einfach die gesammten Daten als String hälst und nicht leer ist, dann kannst du die daten natürlich einfach darstellen.

Der Downloader ist aber eine relativ netzwerklastige Operation. Wenn du sie direkt auf deiner MainActivity ausführen würdest, würde sie diese blockieren für die dauer des Downloads.

Würde ich also in einem Thread auslagern...

Ich habe dazu ein tutorial hier geschrieben...

z.B.

Code:
public void onClick(View v) {
  new JsonDownloaderTask().execute("irgendein/welche parameter");
}

private class JsonDownloaderTask extends AsyncTask<String, void, String> {

     protected String doInBackground(String... parameter) {
         return JsonDownloader.getData(paramater[0]);
     }

     protected void onPostExecute(String result) {
         textFeld.setText(result);
     }
 }

Das gehört in deine MainActivity. Wird ein Click-Event ausgelöst, wird Thread gestartet, der die getData Operation ausführt und ein textfeld setzt.

cheers
 
Danke erstmal für deine Tips.

Es scheint noch nicht zu funktionieren, die Daten werden noch nicht im Log angezeigt...


Wenn ich mein php File direkt aufrufe:
http://192.168.2.2/android_mysql.php

bekomme ich im Browser diese Ausgabe:
[{"id":"10","name":"tim","sex":"1","birthyear":"1985"},{"id":"11","name":"basti","sex":"1","birthyear":"1986"}]

also zugriff auf die DB ist auf jeden Fall da.

Wenn ich die Anwendung am Desire ausführe bekomme ich im Log
diese 2 Fehler:
08-12 10:57:26.762: ERROR/log_tag(6174): Error converting result java.lang.NullPointerException
08-12 10:58:19.582: ERROR/log_tag(6174): Error parsing data org.json.JSONException: End of input at character 0 of

Das mit dem Threading schaue im mir danach an , wie gesagt hänge erstmal hier...

Über den http post scheint er drüber zu gehen, der Fehler passiert beim 2ten Teil des Codes , so wie ich das sehe ... ist das richtig ?

Gruss
wiesel32
 
die konvertierung des result strings in das json format klappt nicht bzw du lieferst nix zum konvertieren...

was ist das für eine url? hast du dein skript jetzt auf dem localhost oder auf einem server?

entferne doch erstmal alle json sachen aus deinem java code und versuche einfach nur den result string auszugeben der von der seite geholt wird
 
Hi die URL ist mein WebServer bei mir im Heimnetz (QNAP).
Habe auf dem das php File "android_myphp.php" abgelegt.

Habe jetzt alle Json Sachen entfernt.
Habe nur noch diesen Teil drin gelassen:
Code:
[LEFT]EditText nameField2 = (EditText) findViewById(R.id.name_field2);
EditText nameField1 = (EditText) findViewById(R.id.name_field);[/LEFT]
 
[LEFT]String result = "";
//the year data to send
ArrayList<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();
nameValuePairs.add(new BasicNameValuePair("year","1980"));[/LEFT]
 
[LEFT]//http post
try{
HttpClient httpclient = new DefaultHttpClient();
HttpPost httppost = new HttpPost("http://192.168.2.2/android_mysql.php");
httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
HttpResponse response = httpclient.execute(httppost); 
HttpEntity entity = response.getEntity();
InputStream is = entity.getContent();[/LEFT]
 
[LEFT]}catch(Exception e){
Log.e("log_tag", "Error in http connection "+e.toString());
nameField2.setText("HTTP Verbindungsfehler");
}
//convert response to string
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();[/LEFT]
 
[LEFT]result=sb.toString();
nameField1.setText(result);[/LEFT]
 
[LEFT]}catch(Exception e){
Log.e("log_tag", "Error converting result "+e.toString());
nameField2.setText("Konvertierungsfehler");[/LEFT]
}

Bekomme aber im Log wieden den Fehler:
08-12 11:35:08.542: ERROR/log_tag(6290): Error converting result java.lang.NullPointerException

so sollte die Ausgabe des strings "result" doch zu funktionieren:
Code:
nameField1.setText(result);

bei dieser Zeile im Code steht eine Warnung :
Die lokale Variable is wird nie gelesen.
Vielleicht hat es mit dem was zu tun...
Code:
[SIZE=2][LEFT]InputStream [U]is[/U] = entity.getContent(); [/LEFT]
[/SIZE]

Irgendwo ist da ein Wurm drinn...:-(


Gruss
 
Zuletzt bearbeitet:
der wurm könnte sein das dein htc gar keine daten holt, weil keine verbindung zum server besteht, ergo ist der inputstream null. wie hast du dein htc dafür konfiguriert? da der server ja quasi nicht online ist sondern lokal musst du bei deinem htc wlan aktivieren und dich mit dem router verbinden, mit dem auch dein server verbunden ist.
 
Zudem würde ich es mal mit HttpGet versuchen, wenn du das Dokument vom Server anfordern willst. Mit HttpPost sendest du nur Daten an die URL.
Ansonsten würd ich mal die Permissions checken.
 
Mein HTC ist mit dem Router 100% über WLAN verbunden.
Ich habe über mein HTC Zugriff auf dem WebServer und Router und Internet....
 
wie der kommilitone schon sagte, brauchst du die permission:D

<uses-permission android:name="android.permission.INTERNET" />

und zwar direkt nach dem </application> tag in der AndroidManifest.xml in deinem Projektordner.

als ich an meiner lösung gearbeitet habe war der fehler oft in einfach falschen try catch anordnung zu finden, fand ich komisch, aber durch probiern hab ichs gelöst:

Code:
String url = "http://192.168.178.21/iwas/wass.php";
		String result = "";
	    DefaultHttpClient client = new DefaultHttpClient();
	    HttpGet method = new HttpGet(url);
	    HttpResponse res = null;
	    try {
			res = client.execute(method);
		} catch (ClientProtocolException e1) {
			// TODO Auto-generated catch block
			e1.printStackTrace();
		} catch (IOException e1) {
			// TODO Auto-generated catch block
			e1.printStackTrace();
		}

		try{
			InputStream is = res.getEntity().getContent();
		     BufferedReader reader = new BufferedReader(new InputStreamReader(is,"iso-8859-1"));
		     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());
		}

so funktionierts bei mir
 
Muss leider in die Arbeit , werde mir das später testen.


Danke erstmal.

Gruss
 

Ähnliche Themen

S
Antworten
33
Aufrufe
2.540
Sempervivum
S
H
Antworten
2
Aufrufe
1.283
Hcman
H
R
  • Robby1950
2
Antworten
23
Aufrufe
954
Robby1950
R
Zurück
Oben Unten