Datenbank Abfragen

  • Antworten:72
Markus B.
  • Forum-Beiträge: 636

13.05.2011, 16:59:43 via Website

Ähhhh,
das localhost steht nicht in deinem Android-Code oder ? :)
Denn localhost wäre ja in dem Fall das Handy selbst. Tausch localhost einfach durch deine Rechner-Ip aus also z.B. 192.168.100.12.

Gruß,
Markus

Antworten
Gelöschter Account
  • Forum-Beiträge: 37

13.05.2011, 17:13:02 via Website

http://93.208.156.226/StundenPlanAppDatenbankAbfrage.php

das ist meine derzeitige ip. Wen ich die eingebe kommt der Fehler:
05-13 15:11:30.260: ERROR/log_tag(793): Error converting result org.apache.http.NoHttpResponseException: The target server failed to respond

Und wen ich versuche übern Browser so auf die Datei zuzugreifen Kriege ich ebenfalls keine Verbindung. Muss ich irgendwas Freischalten oder so?

EDIT:
hat sich erledigt war einfach nur dämlich und schäme mich^^

— geändert am 13.05.2011, 17:43:05

Antworten
Gelöschter Account
  • Forum-Beiträge: 5.136

13.05.2011, 17:28:01 via Website

Die 93.208.156.226 ist Deine externe IP Adresse.

Du musst mal irgendwie an die Adresse gelangen, die der Rechner auf dem Dein kleiner Webserver läuft. (Vermutlich im Wlan)

in der Command Line des Rechners einfach mal : ipconfig eingeben und [Enter] drücken .. dann müsste neben IP-V4 Adresse: die entsprechende IPAdresse stehen. Dorthin musst Du Dich verbinden mit Deinem Script.

P.S. Dafür müssen Handy und PC natürlich beide im gleichen Wlan eingebucht sein.

— geändert am 13.05.2011, 17:30:47

lg Voss

Antworten
Gelöschter Account
  • Forum-Beiträge: 37

13.05.2011, 17:49:24 via Website

Ich liebe euch es funktioniert!!!! YEAH!!!

nurnoch paar feinabstimmungen dan ist alles so wie ich es haben wollte : ) ...

Vielen dank euch allen für eure tolle Hilfe ohne euch hätte ich es wol nie geschafft!

Jörg Voss und Markus B da ihr mir sehr geholfen habe werde ich euch ausführlich in meiner Dokumentation erwähnen. Desweiteren werde ich ebenfals bei der Präsentation des Projektes euch einige Minuten widmen. Wen ihr wollt könnt ihr mir Persönliche Daten bzw. fals der Forum Name nicht euer richtige ist diesen mir Schreiben.

Alle materialien die ich verwendet habe wurden von mir Dokumentiert und werden ebenfalls als Quellen genannt.

— geändert am 13.05.2011, 18:14:45

Antworten
Markus B.
  • Forum-Beiträge: 636

13.05.2011, 18:02:02 via Website

Roland Frescher
Ich liebe euch es funktioniert!!!! YEAH!!!

nurnoch paar feinabstimmungen dan ist alles so wie ich es haben wollte : ) ...

Vielen dank euch allen für eure tolle Hilfe ohne euch hätte ich es wol nie geschafft!

Hi,
freut mich für dich !
Dann hat sich die Arbeit ja gelohnt !

Gruß,
Markus

Antworten
Gelöschter Account
  • Forum-Beiträge: 37

13.05.2011, 18:16:37 via Website

Wen ich alles komplett habe werde ich das App hier nochmal uploaden damit ihr anderen damit helfen könnt fals sie einmal das selbe vor haben wie ich.
Ihr könnt mir auch gerne ein Foto von euch zuschicken (Ein Ordentliches bitte fals gewünscht ihr werden von 2500 Menschen gesehen) wen ihr nicht wollt das ich euch erwähne (bei Namen) so schreibt es hier bitte.

— geändert am 13.05.2011, 18:18:03

Antworten
Markus B.
  • Forum-Beiträge: 636

13.05.2011, 18:46:43 via App

Hi, also ich, für meinen Teil, habe dich ja nur etwas in die richtige Richtung geschubst. Hol dir die Anerkennung für deine Arbeit! Ich würde es aber begrüßen wenn du den Android und php Code öffenflich machen würdest. Wie du schon gesagt hast das wird sicher jemandem irgendwann helfen :)

Gruß,
Markus

Antworten
Gelöschter Account
  • Forum-Beiträge: 37

13.05.2011, 19:31:40 via Website

Also in die richtige Richtung geschupst finde ich etwas untertrieben : )

Habe da noch ein Problem un zwa wollte ich jetzt den Spinner integrieren:

public void onItemSelected(AdapterView<?> parent,
View view, int pos, long id)
{
/**Toast.makeText(parent.getContext(), "Die Woche ist " +
parent.getItemAtPosition(pos).toString(), Toast.LENGTH_LONG).show(); */
final ArrayList<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();
nameValuePairs.add(new BasicNameValuePair("AgenturNr", ""+parent.getItemAtPosition(pos).toString()));
try
{
goHttp();

}
catch (JSONException e)
{
Log.i( "log_tag" , "onItemSelected() - " + e.getMessage());
}
}

Ich weiss leider nicht wie ich dies wieder zurück übertrage in die Methode goHttp(). Könntest noch einmal helfen bitte?^^

Hier rein muss jezt
nameValuePairs
Da wo die *** sind.

1private void goHttp() throws JSONException
2 {
3 String result = "";
4 //the year data to send
5
6 ******************************************
7
8 //http post
9 try
10 {
11
12 final HttpClient httpclient = new DefaultHttpClient();
13 final HttpPost httppost = new HttpPost("http://192.168.2.32/StundenPlanAppDatenbankAbfrage.php");
14
15 httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
16 final HttpResponse response = httpclient.execute(httppost);
17 final HttpEntity entity = response.getEntity();
18 final InputStream inputStream = entity.getContent();
19
20
21
22 //convert response to string
23 final BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream, "ISO-8859-1"), 8);
24 final StringBuilder stringBuilder = new StringBuilder();

— geändert am 13.05.2011, 19:34:12

Antworten
Markus B.
  • Forum-Beiträge: 636

13.05.2011, 23:05:42 via Website

Hi,
verstehe ich das richtig:
Du willst also nun den Spinner nutzten um eine Auswahl zutreffen und mit dem Wert dann deine Query im PhP-Skript anpassen?
Das ist eigentlich ziemlich einfach:

Du passt einfach die Methode goHttp() wie folgt an:
1private void goHttp(final String klasse, final String woche) throws JSONException
2{
3....
4
5 final HttpClient httpclient = new DefaultHttpClient();
6 final HttpPost httppost = new HttpPost("http://192.168.2.32/StundenPlanAppDatenbankAbfrage.php?klasse=" + klasse + "&woche="+woche);
7....
8}

Damit übergibst du deinem php-Skript zwei Parameter (klasse und woche), welche den Werten der beiden Spinner enthalten. Auf die beiden Parameter kannst du dann einfach in deinem Skript zugreifen. Die Werte packst du dann in deine Query und dann bist du fertig :)
Da du hier Parameter via URL übergibst schau die bitte noch folgendes zu Sql-Injection an.



Gruß,
Markus

— geändert am 14.05.2011, 00:04:20

Antworten
Gelöschter Account
  • Forum-Beiträge: 37

14.05.2011, 00:23:47 via Website

Gibt es nicht eine direckte methode? Den ich übergebe ja schon werte zum script:

1package AndroidStundenPlan.App;
2
3
4import android.app.Activity;
5import android.os.Bundle;
6import android.util.Log;
7import android.view.View;
8import android.widget.AdapterView;
9import android.widget.AdapterView.OnItemSelectedListener;
10import android.widget.ArrayAdapter;
11import android.widget.Button;
12import android.widget.Spinner;
13import android.widget.TextView;
14import android.widget.Toast;
15
16import org.apache.http.HttpEntity;
17import org.apache.http.HttpResponse;
18import org.apache.http.NameValuePair;
19import org.apache.http.client.HttpClient;
20import org.apache.http.client.entity.UrlEncodedFormEntity;
21import org.apache.http.client.methods.HttpPost;
22import org.apache.http.impl.client.DefaultHttpClient;
23import org.apache.http.message.BasicNameValuePair;
24import org.json.JSONArray;
25import org.json.JSONException;
26import org.json.JSONObject;
27
28import java.io.BufferedReader;
29import java.io.InputStream;
30import java.io.InputStreamReader;
31import java.util.ArrayList;
32
33/**
34 * import java.sql.Connection;
35 * import java.sql.DriverManager;
36 * import java.sql.ResultSet;
37 * import java.sql.SQLException;
38 * import java.sql.Statement;
39 */
40
41public class androidStundenPlanApp extends Activity
42{
43 /**
44 * Called when the activity is first created.
45 */
46 @Override
47 public void onCreate(Bundle savedInstanceState)
48 {
49 super.onCreate(savedInstanceState);
50 setContentView(R.layout.main);
51
52 /** Erster Spinner zur Auswahl der Klasse! */
53
54 Spinner s = (Spinner) findViewById(R.id.spinner);
55 ArrayAdapter adapter = ArrayAdapter.createFromResource(
56 this, R.array.Klassen, android.R.layout.simple_spinner_item);
57 adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
58 s.setAdapter(adapter);
59 s.setOnItemSelectedListener(new MyOnItemSelectedListener());
60
61 /** Zweiter Spinner Wochenauswahl */
62
63 Spinner d = (Spinner) findViewById(R.id.spinner2);
64 ArrayAdapter adapter2 = ArrayAdapter.createFromResource(
65 this, R.array.wochen, android.R.layout.simple_spinner_item);
66 adapter2.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
67 d.setAdapter(adapter2);
68 d.setOnItemSelectedListener(new MyOnItemSelectedListener2());
69
70 /** Abschicken Button */
71 /**final Button button = (Button) findViewById(R.id.abschickenbutton);
72 button.setOnClickListener(new View.OnClickListener()
73 {
74 public void onClick(View v)
75 {
76 setContentView(R.layout.abschickenbutton);
77 }
78 });
79 final Button button2 = (Button) findViewById(R.id.zurueckbutton);
80 button.setOnClickListener(new View.OnClickListener()
81 {
82 public void onClick(View v)
83 {
84 setContentView(R.layout.main);
85 }
86 }); */
87
88
89 }
90
91 /**
92 * Auswertung des Ersten Spinners (Klassenauswahl)
93 */
94 public class MyOnItemSelectedListener implements OnItemSelectedListener
95 {
96
97 public void onItemSelected(AdapterView<?> parent,
98 View view, int pos, long id)
99 {
100 /** Kurzer Popup der auswahl! */
101 Toast.makeText(parent.getContext(), "Die Klasse ist " +
102 parent.getItemAtPosition(pos).toString(), Toast.LENGTH_LONG).show();
103
104 /** Dauerhafte ausgab der AUswahl! */
105 /**TextView test = (TextView) findViewById(R.id.barname);
106 test.setText("Select * FROM STUNDENPLANDB WHERE Klasse2 = " + parent.getItemAtPosition(pos).toString()); */
107
108
109 }
110
111
112 public void onNothingSelected(AdapterView<?> parent)
113 {
114 // Do nothing.
115 }
116 }
117
118 /**
119 * Auswertung des zweiten Spinners (Wochenauswahl)
120 */
121 public class MyOnItemSelectedListener2 implements OnItemSelectedListener
122 {
123 public void onItemSelected(AdapterView<?> parent,
124 View view, int pos, long id)
125 {
126 /**Toast.makeText(parent.getContext(), "Die Woche ist " +
127 parent.getItemAtPosition(pos).toString(), Toast.LENGTH_LONG).show(); */
128
129 try
130 {
131 goHttp();
132
133 }
134 catch (JSONException e)
135 {
136 Log.i( "log_tag" , "onItemSelected() - " + e.getMessage());
137 }
138 }
139
140 public void onNothingSelected(AdapterView<?> parent)
141 {
142 // Do nothing.
143 }
144
145 private void goHttp() throws JSONException
146 {
147 String result = "";
148 //the year data to send
149
150
151
152 //http post
153 try
154 {
155
156 final HttpClient httpclient = new DefaultHttpClient();
157 final HttpPost httppost = new HttpPost("http://192.168.2.32/StundenPlanAppDatenbankAbfrage.php");
158
159
1final ArrayList<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();
2 nameValuePairs.add(new BasicNameValuePair("AgenturNr", ""+parent.getItemAtPosition(pos).toString()));

160 httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
161 final HttpResponse response = httpclient.execute(httppost);
162 final HttpEntity entity = response.getEntity();
163 final InputStream inputStream = entity.getContent();
164
165
166
167 //convert response to string
168 final BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream, "ISO-8859-1"), 8);
169 final StringBuilder stringBuilder = new StringBuilder();
170
171 String line = null;
172 while (null != (line = reader.readLine()))
173 {
174 stringBuilder.append(line).append("\n");
175
176 }
177 inputStream.close();
178
179 result = stringBuilder.toString();
180
181 }
182
183 catch (Exception e)
184 {
185
186 Log.e("log_tag", "Error converting result " + e.toString());
187 }
188
189 //parse json data
190 try
191 {
192 final JSONArray jArray = new JSONArray(result);
193 for (int i = 0; i < jArray.length(); i++)
194 {
195 final JSONObject json_data = jArray.getJSONObject(i);
196 Toast.makeText(getBaseContext(),"" + jArray.getJSONObject(i), Toast.LENGTH_LONG).show();
197 Log.i("log_tag",
198 "," + json_data.getString("AgenturNr") +
199 "," + json_data.getInt("Vorwahl") +
200 "," + json_data.getString("Name")
201 );
202 }
203
204 }
205 catch (JSONException e)
206 {
207 Log.e("log_tag", "Error parsing data " + e.toString());
208 }
209 }
210 }
211
212
213
214}



Beim CodeTag im CodeTag da habe ich ja die übergabe werte bereits drin,und einen statischen wert kann ich schon übergeben ich will ja aber da hin der wert eines spinners haben.+parent.getItemAtPosition(pos).toString() <--- Funktioniert ja nicht da" parent "ja nicht der Spinner is in dem falle. Ich muss im grunde das was ich in den spinner habe nach unten zu goHtp() bringen. Gibs da keine möglichkeit?

— geändert am 14.05.2011, 00:26:47

Antworten
Markus B.
  • Forum-Beiträge: 636

14.05.2011, 02:28:18 via App

Hi, kannst die sourcen bitte wieder hochladen? z.B. bei pastebin.com oder github.com. Alternativ geht auch wieder raoidshare. Den Code hier im Forum zu prüfen nervt nur :) Ich schau mir die Geschichte dann gerne nach ein paar Stunden Schlaf an.

Gruß,
Markus

— geändert am 14.05.2011, 02:28:40

Antworten
Gelöschter Account
  • Forum-Beiträge: 37

14.05.2011, 16:27:28 via Website

https://rapidshare.com/files/2140095780/AndroidTest2.zip

Bittö :P Zeile 160,161 Steht Spinnerauswahl,Spinner2auswahl da müsste halt des hin was ich in den Zwei Spinnern auswähle.

— geändert am 14.05.2011, 16:29:46

Antworten
Markus B.
  • Forum-Beiträge: 636

14.05.2011, 21:21:41 via Website

Hi,
ahh okay du setzt die Parameter via Post.
Dann muss du folgende Sachen anpassen:
1final ArrayList<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();
2nameValuePairs.add(new BasicNameValuePair("AgenturNr", ""+"Spinnerauswahl"));
3nameValuePairs.add(new BasicNameValuePair("AgenturNr", ""+"Spinner2auswahl"));

Die beiden BasicNameValuePair's haben den selben key und das macht keinen Sinn. Hier muss du dann einfach zwei verschiedene key's vergeben.
In deiner php-Datei solltest du die Wert dann wie folgt auslesen können:
1$_POST["param1"]
2$_POST["param2"]

Gruß,
Markus

— geändert am 14.05.2011, 22:43:16

Antworten
Gelöschter Account
  • Forum-Beiträge: 37

14.05.2011, 23:00:45 via Website

Ich glaube wir haben uns bisl missverstanden. Also ich habe zwei Spinner (Auswahl durch Dropdown menu) diese sind in meinem Java als Spinner und Spinner 2 zu finden. Doert wählt der USER aus welche Klasse er ist bzw. das Datum. Nun diese auswahl die oben in meinem Java zu finden sind soll jezt anstatt Spinnerauswahl
Spinner2auswahl
eingebunden werden. Z.B kann ja der USER im Spinner 1 die Klasse FG141 wählen. Dan soll diese Auswahl dem goHTP übergeben werden.

Daraus folgt:
1nameValuePairs.add(new BasicNameValuePair("AgenturNr", ""+"Was der user gewählt hatte"));

Antworten
Markus B.
  • Forum-Beiträge: 636

14.05.2011, 23:23:49 via Website

Achso,
dann mach die doch einfach zwei globale Variablen, welche du in onCreate mit einem default Wert füllst.
In deinen OnItemSelectedListener setzt du dann in entsprechenden Variablen mit den Werten aus den Spinner.
Die beiden Variablen werden dann von goHttp genutzt und es wird eine entsprechende Anfrage an dein Skript geschickt.

Wenn ich es jetzt immer noch nicht verstanden haben sollte bekommst du TS3-Daten von mir ...

Gruß,
Markus

Antworten
Gelöschter Account
  • Forum-Beiträge: 37

14.05.2011, 23:42:51 via Website

Doch genau so, aber wir könnten uns Trotzdem morgen gerne mal im TS3 treffen : )

Antworten
Gelöschter Account
  • Forum-Beiträge: 37

15.05.2011, 11:31:44 via Website

Noch ein leztes Problem was ich nochnicht gelöst habe: Ich bekomme einen String in diesem Format zurück:

[{"Stunde":"1","Montag":"ENG","Dienstag":"PH","Mittwoch":"TE","Donnerstag":"DC","Freitag":"OP","Samstag":"MG","Sonntag":"NE","Klasse":"FG123"},{"Stunde":"2","Montag":"DE","Dienstag":"MA","Mittwoch":"SE","Donnerstag":"KM","Freitag":"TG","Samstag":"37","Sonntag":"CV","Klasse":"FG123"},{"Stunde":"3","Montag":"SP","Dienstag":"FE","Mittwoch":"ME","Donnerstag":"LE","Freitag":"HK","Samstag":"VE","Sonntag":"PH","Klasse":"FG123"}]

Wie man sieht ist dieser String die auswertung meine Tabelle. Ich möchte jezt aus diesem wirrwar eine Tabelle erstellen, die wie folgt aussieht:

http://imageshack.us/photo/my-images/21/stundenplantb.png/

— geändert am 15.05.2011, 11:33:27

Antworten
Ansgar M
  • Forum-Beiträge: 1.544

15.05.2011, 11:38:20 via App

Das ist ein JSON-Array. Google mal danach, oder guck in Tutorial Forum nach dem Thread von L3322.
Lg Ansgar

Antworten
Gelöschter Account
  • Forum-Beiträge: 37

15.05.2011, 13:45:34 via Website

Montag[i] = json_data.getString("Montag");
Also habe jezt den JSON String einfach in eine Array Reingeprügelt : )
Bleibt nur die Frage wie ich jezt eine Tabelle erstelle :P

Also die wie folg aussieht jetzt:

Montag Dienstag Mitwoch [...]
Montag[1] Dienstag[1] Mitwoch[1]
Montag[2] Dienstag[2] Mitwoch[2]
Montag[3] Dienstag[3] Mitwoch[3]

Die Tabelle soll ebenfalls Grafisch angezeigt werden.

— geändert am 15.05.2011, 13:56:42

Antworten
Markus B.
  • Forum-Beiträge: 636

15.05.2011, 14:02:19 via App

Hi,
dazu schaust du dir dann einfach mal die Table-View an.

http://www.google.com/m/url?client=ms-android-google&ei=_b_PTbiFBsSJ8gPUqKiUAw&gl=de&hl=de&q=http://developer.android.com/resources/tutorials/views/hello-tablelayout.html&source=android-browser-type&ved=0CBUQFjAA&usg=AFQjCNEiq-mc8U3vmIgDwqfO6on_sgQ6FQ

http://www.google.com/m/url?client=ms-android-google&ei=_b_PTbiFBsSJ8gPUqKiUAw&gl=de&hl=de&q=http://developerlife.com/tutorials/?p%3D307&source=android-browser-type&ved=0CB0QFjAC&usg=AFQjCNFvWIKiTpwEkAtB9jawh1pPhvqFnw

http://www.google.com/m/url?client=ms-android-google&ei=_b_PTbiFBsSJ8gPUqKiUAw&gl=de&hl=de&q=http://www.androidpit.de/de/android/forum/thread/420816/Scollbare-TableView&source=android-browser-type&ved=0CCEQFjAD&usg=AFQjCNHiNXwCQe0wFIznJdkAgkLCKSB2AA

Okay Links via app sind nicht so pralle.

Gruß,
Markus

— geändert am 15.05.2011, 14:04:50

Antworten
Gelöschter Account
  • Forum-Beiträge: 37

15.05.2011, 17:03:11 via Website

1<TableLayout xmlns:android="http://schemas.android.com/apk/res/android"
2 android:layout_width="fill_parent"
3 android:layout_height="fill_parent"
4 android:stretchColumns="1">
5 <TableRow>
6 <TextView
7 android:padding="3dip" />
8 <TextView
9 android:gravity="right"
10 android:padding="3dip" />
11 </TableRow>
12
13 <TableRow>
14 <TextView
15 android:padding="3dip" />
16 <TextView
17 android:gravity="right"
18 android:padding="3dip" />
19 </TableRow>
20</TableLayout>

Habe jezt eine zweizeiler Tabelle erstellt. Verstehe nur jezt nich wie ich mein Inhalt darin anzeigen kann : /

EDIT: Okay man sollte erst überlegen dan Posten. Habe jezt rausgefunden wie ichs machen muss.
Nur wie lasse ich die Ränder der Tabelle anzeigen?
Desweiteren habe ich festgestellt das die Tabelle größer ist als das was ich Anzeigen lassen kann, ich breuchte einen Scroll-Balken oder sowas.

EDIT2: Okay, Scrollen nach unten geht jezt aber wes nicht wie ichs auch nach rechts/links machen kann : )

— geändert am 15.05.2011, 18:18:49

Antworten
Gelöschter Account
  • Forum-Beiträge: 37

16.05.2011, 18:40:36 via Website

Also die App ist sogut wie Fertig es fehlen nurnoch bisl Desing zeug, was kein Problem ist. Wen ich die App komplett Fertig habe werde ich (da ich es eh machen muss) einen Guide schreiben bzw. Dokumentieren wie ich bzw. Ihr die App gemacht habt/haben/hab. Diesen Guide darf ich Hoffentlich hier ins Forum posten nachdem ich die App Presentiert habe.

MfG
Roland Frescher

PS: Ihr habt mir alle super Geholfen!

Antworten