MySql Datenbank in ein TableLayout auslesen!

  • Antworten:11
Andreas Lorenz
  • Forum-Beiträge: 111

07.02.2011, 17:38:12 via Website

Hallo,

ich wurde durch das Tutorial von L3322 inspiriert und habe das ganze für TabelLayout implementiert.
Diese Tabelle ist dynamisch und stellt alle MySQL Ergebnisse in zwei Spalten dar.

Für Feedback wäre ich sehr dankbar, da dieser Code mein erstes Posting im Entwickler Forum ist.

Die Vorarbeit ist dem original Tutorial von L3322 zu entnehmen.

Die PHP-Datei dem Beispiel entsprechend angepasst:
1<?php
2 mysql_connect("deinhost","deinusername","deinpasswort");
3 mysql_select_db("deinedatenbank");
4
5 $q=mysql_query("SELECT column1, column2 FROM table");
6 while($e=mysql_fetch_assoc($q))
7 $output[]=$e;
8
9 print(json_encode($output));
10
11 mysql_close();
12?>

Das XML-Tabellen-Layout (layout.xml):
1<?xml version="1.0" encoding="utf-8"?>
2<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
3 android:orientation="vertical"
4 android:layout_width="fill_parent"
5 android:layout_height="fill_parent"
6 >
7 <ScrollView android:id="@+id/ScrollView01" android:layout_width="wrap_content" android:layout_height="wrap_content">
8 <TableLayout android:id="@+id/TableLayout01" android:layout_width="fill_parent" android:layout_height="wrap_content" android:stretchColumns="0">
9
10 <TableRow android:id="@+id/TableRow01" android:layout_width="wrap_content" android:layout_height="wrap_content">
11 <TextView android:id="@+id/TextView01" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="column1"</TextView>
12
13 <TextView android:id="@+id/TextView02" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="column2"></TextView>
14 </TableRow>
15
16 </TableLayout>
17 </ScrollView>
18</LinearLayout>

Nun die zugehörige Klasse (die von mir geänderte Teile des original Tutorial sind "fett" markiert):
1public class testMySQL extends Activity {
2 InputStream is;
3 JSONObject json_data;
4 TableLayout table;
5 TextView columnOneText;
6 TextView columnTwoText;
7 String columnOneString;
8 String columnTwoString;

9
10 @Override
11 public void onCreate(Bundle savedInstanceState) {
12 super.onCreate(savedInstanceState);
13 setContentView(R.layout.layout);
14
15 getData();
16 }
17
18 public void getData() {
19 String result = "";
20 ArrayList<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();
21
22 try {
23 HttpClient httpclient = new DefaultHttpClient();
24 HttpPost httppost = new HttpPost("http://deinehomepage.de/deinephpDatei.php");
25 httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
26 HttpResponse response = httpclient.execute(httppost);
27 HttpEntity entity = response.getEntity();
28 is = entity.getContent();
29 }catch(Exception e){
30 Log.e("log_tag", "Fehler bei der http Verbindung "+e.toString());
31 }
32
33 try {
34 BufferedReader reader = new BufferedReader(new InputStreamReader(is,"iso-8859-1"),8);
35 StringBuilder sb = new StringBuilder();
36 String line = null;
37 while ((line = reader.readLine()) != null) {
38 sb.append(line + "n");
39 }
40 is.close();
41 result=sb.toString();
42 }catch(Exception e){
43 Log.e("log_tag", "Error converting result "+e.toString());
44 }
45
46 try {
47 JSONArray jArray = new JSONArray(result);
48 for(int i=0;i<jArray.length();i++){
49 json_data = jArray.getJSONObject(i);
50 columnOneString = json_data.get("column1").toString();
51 columnTwoString = json_data.get("column2").toString();

52 fillList();
53 }
54 }catch(JSONException e){
55 Log.e("log_tag", "Error parsing data "+e.toString());
56 }
57 }
58
59 public void fillList() {
60
61 table = (TableLayout) findViewById(R.id.TableLayout01);
62 TableRow row = new TableRow(this);
63 columnOneText = new TextView(this);
64 columnTwoText = new TextView(this);
65 columnOneText.setText(columnOneString);
66 columnTwoText.setText(columnTwoString);
67 row.addView(columnOneText);
68 row.addView(columnTwoText);
69
70 table.addView(row,new TableLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
71 }

72}

Danke an L3322 für die Verwendung seiner Implementierung.

— geändert am 07.02.2011, 17:41:11

AeefireAnsgar ML3322

Antworten
Aeefire
  • Forum-Beiträge: 172

11.07.2011, 22:19:51 via Website

Dankeschön, ist sicher mal zu gebrauchen... muss man sich die ganze Mühe nicht selber machen ;)

— geändert am 11.07.2011, 22:23:52

Antworten
Richard R.
  • Forum-Beiträge: 90

14.07.2011, 17:49:51 via Website

Super, genau das was ich gesucht habe. Thx!

Antworten
Lukas
  • Forum-Beiträge: 10

17.07.2011, 22:05:03 via Website

Hey,

danke erstmal für deine Bemühungen ein solches Tutorial zu erstellen / editieren.

Ich habe dieses genauso übernommen. Habe meine eigene Verbindung zur SQL-Datenbank aufgebaut wo ich auch meine Tabellen gespeichert habe.

Wenn ich allerdings die Application starte, dann wird lediglich column1 und column2 angezeigt, jedoch nicht den ausgewählten Inhalt von der PHP-Datei.

Was muss ich tun, bzw. beachten damit dies korrekt angezeigt wird?

Danke erstmal ;).

Antworten
Ansgar M
  • Forum-Beiträge: 1.544

25.08.2011, 19:26:46 via Website

@Lukas: Besteht das Problem immer noch?:)
Lg Ansgar

Antworten
Burak
  • Forum-Beiträge: 37

04.01.2012, 10:20:56 via Website

Danke erstmal für das Tutorial :)

hab bloß ein problem jetzt.

LogCat gibt mir folgende Fehlermeldung

Error parsing data org.json.JSONException: Value nnnulln of type java.lang.String cannot be converted to JSONArray


ich hab den Code 1zu1 übernommen und weiß nicht wo der Wurm ist :S

Antworten
Ansgar M
  • Forum-Beiträge: 1.544

21.01.2012, 14:25:01 via Website

Burak
Error parsing data org.json.JSONException: Value nnnulln of type java.lang.String cannot be converted to JSONArray
Hey,
laut dem Logcat stimmt da irgendwas in dem JSON nicht. Vielleicht mal mit nem Webbrowser aufrufen und gucken, ob da irgendwas falsch ist?
Lg Ansgar

Antworten
Q 1221q
  • Forum-Beiträge: 20

22.04.2012, 21:53:29 via Website

Hallo,

bin über die Suche auf diesen Beitrag gestoßen.
Auch ich habe den Code 1zu1 übernommen und erhalte folgende 3 Zeilen im LogCat:

Fehler bei der http Verbindung android.os.NetworkOnMainThreadException
Error converting result java.lang.NullPointerException
Error parsing data org.json.JSONException: End of input at character 0 of

Die letzte scheint ja die selbe wie zwei Beträge darüber zu sein, wenn ich auf meine Homepage gehe (normaler Browser) wird alles korrekt angezeigt.
Auch hier habe ich den PHP / MySQL Teil übernommen.

Woran könnte es noch liegen?
Vielen Dank für eure Unterstützung!

Antworten
Ansgar M
  • Forum-Beiträge: 1.544

23.04.2012, 18:08:15 via App

Hey,
ich vermute, du testest unter Android 4.0? Seit dieser Version ist es im MainThread (dort, wo das UI läuft) nicht mehr erlaubt Daten aus dem Internet zu laden.
Hier bräuchte man einen Thread oder einen Async Task.
Lg Ansgar

Antworten
Q 1221q
  • Forum-Beiträge: 20

23.04.2012, 19:05:04 via Website

Ansgar M
Hey,
ich vermute, du testest unter Android 4.0? Seit dieser Version ist es im MainThread (dort, wo das UI läuft) nicht mehr erlaubt Daten aus dem Internet zu laden.
Hier bräuchte man einen Thread oder einen Async Task.
Lg Ansgar

Okay erst einmal VIELEN DANK !
Wie gesagt ich bin neu bei der Android Entwicklung - da wär ich wahrscheinlich lange nicht selbst drauf gekommen ;-)

Also mit 2.3 (virtuelles Gerät) lief der Code einwandfrei...

Was mich zur nächsten Frage bringt - wie würde ich es bei 4.0 oder höher machen?
Also ich möchte keinen fertigen Code von dir, bitte nicht falsch verstehen!
Will ja lernen :)
Gibt es für dieses Theme interessante Tutorials, eBooks, normale Bücher?
Was würdest du mir empfehlen?

Vielen Dank nochmal!

Antworten
Ansgar M
  • Forum-Beiträge: 1.544

23.04.2012, 19:59:42 via Website

Kein Problem.

Die "technische" Lösung, dich zu informieren, wäre mit der offiziellen Dokumentation unter AsyncTask.

Dann gäbe es da noch ein Tutorial von Lars Vogel, bzw. ein Beispiel, wie man den AsyncTask bzw. einen Thread mit einem Handler unter Android benutzt.

Wie du wahrscheinlich merkst, ist das alles auf Englisch. Da solltest du dich schonmal dran gewöhnen und, falls es ein Problem darstellen sollte, vielleicht in Betracht ziehen, die Sprache zu lernen.

Lg Ansgar

P.S. Wenn du das Programmieren für Android im Allgemeinen lernen willst, würde ich dir empfehlen (sofern du keine Java Grundkenntnisse hast) dir erstmal Java anzueignen (nur die Basics) und dann mit den Android spezifischen Fachbüchern und Websiten weiterzumachen. Das wird erstmal weg von der App sein, aber um so schneller kannst du dann (mit den Java Kenntnissen) bei Android weitermachen..
Achja, falls Englisch kein Problem ist: Java Video Tutorials (bis einschließlich 49 sollte für den Anfang bei Android erstmal reichen) und sonst gibt es da auch Android Tutorials

— geändert am 23.04.2012, 19:59:57

Antworten
Q 1221q
  • Forum-Beiträge: 20

23.04.2012, 21:24:49 via Website

Vielen lieben Dank für den wirklich ausführlichen und hilfreichen Beitrag :-)

Englisch ist zum Glück kein Problem, daher werde ich mir auch gerne die Videos ansehen!

Jetzt habe ich ja erstmal neuen "Stoff" ... ran ans Werk ;-)

Antworten