Verbindung von Android auf MySQL Datenbank unter API16 bzw. API 19

  • Antworten:6
  • Bentwortet
Daniel H.
  • Forum-Beiträge: 17

10.04.2014, 19:35:40 via Website

Also zuerst muss ich mal eingestehen, dass ich ziemlich neu bin, beim Android programmieren, programmieren generell übe ich jedcoh schon seit Jahren aus.
Nun, ich muss für die Ausbildung eine Datenauswertungsapp programmieren, dabei möchte ich zwischen Androidgerät und meinem Webserver eine Verbindung herstellen, danach die einzelnen strings und doubles am Bildschirm ausgeben. Doch nachdem ich es heute nach 6h noch nicht geschafft habe, frage ich jetzt euch.
Auf meinem Webserver ist bereits ein PHP-Programm, welches eine bestimme Tabelle meiner MySQL-Datenbank als JSON-Array ausgibt, und zwar unter folgender Webadresse

Zudem habe ich bereits nach dem bekannten Tutorial dafür bei der AndroidManifest.xml die Internet permission hinzugefügt.

Das Problem ist eben nun die Main. Denn wie ich mittlerweile gelesen habe und selbst gemerkt, funktioniert jener Code vom obig genannten Tutorial seit Honeycomb nicht mehr. Leider habe ich nach 6 stündiger Suche und Herumprobiererei immer noch keinen funktionereden Datenbankzugriff.

Habe dann gelesen, es gehe irgendwie mit AsynchronTask geht, habe aber keinen Plan was ich dann wo machen muss.
Würde mich freuen wenn mir jemand helfen könnte, bzw. den Code so verändern dass er funktionert!

mfg,
Daniel


1package connection.example.connection_test;
2
3import java.io.BufferedReader;
4import java.io.InputStream;
5import java.io.InputStreamReader;
6import java.util.ArrayList;
7import org.apache.http.HttpEntity;
8import org.apache.http.HttpResponse;
9import org.apache.http.NameValuePair;
10import org.apache.http.client.HttpClient;
11import org.apache.http.client.entity.UrlEncodedFormEntity;
12import org.apache.http.client.methods.HttpPost;
13import org.apache.http.impl.client.DefaultHttpClient;
14import org.json.JSONArray;
15import org.json.JSONException;
16import org.json.JSONObject;
17import android.os.Bundle;
18import android.app.ListActivity;
19import android.util.Log;
20import android.view.Menu;
21import android.widget.ArrayAdapter;
22
23public class MainActivity extends ListActivity {
24
25 InputStream is;
26 ArrayList<String> results =new ArrayList<String>();
27 JSONObject json_data;
28
29
30
31 @Override
32 protected void onCreate(Bundle savedInstanceState) {
33 super.onCreate(savedInstanceState);
34 getData();
35 }
36
37 private void getData() {
38 String result = "";
39 ArrayList<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();
40
41
42 try{
43 HttpClient httpclient = new DefaultHttpClient();
44 HttpPost httppost = new HttpPost("//Website PHP file");
45 httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
46 HttpResponse response = httpclient.execute(httppost);
47 HttpEntity entity = response.getEntity();
48 is = entity.getContent();
49 }catch(Exception e){
50 Log.e("log_tag", "Fehler bei der http Verbindung "+e.toString());}
51
52
53
54
55 try{
56 BufferedReader reader = new BufferedReader(new InputStreamReader(is,"iso-8859-1"),8);
57 StringBuilder sb = new StringBuilder();
58 String line = null;
59 while ((line = reader.readLine()) != null) {
60 sb.append(line + "n");
61 }
62 is.close();
63 result=sb.toString();
64 }catch(Exception e){
65 Log.e("log_tag", "Error converting result "+e.toString());
66 }
67
68
69
70 try{
71 JSONArray jArray = new JSONArray(result);
72 for(int i=0;i<jArray.length();i++){
73 json_data = jArray.getJSONObject(i);
74 results.add((String) json_data.get("Einheit") + " "+ json_data.get("Wert"));
75 }
76 fillList();
77 }
78 catch(JSONException e){
79 Log.e("log_tag", "Error parsing data "+e.toString());
80 }
81 }
82
83
84
85
86 public void fillList() {
87 // TODO Auto-generated method stub
88 this.setListAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, results));
89 }
90
91
92
93
94
95 @Override
96 public boolean onCreateOptionsMenu(Menu menu) {
97 // Inflate the menu; this adds items to the action bar if it is present.
98 getMenuInflater().inflate(R.menu.main, menu);
99 return true;
100 }
101
102}

Antworten
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

10.04.2014, 20:06:35 via Website

Du musst den Code in einen Anderen Thread auslagern, da eine Network on Main Exception erscheint.
Das heisst, das Laden des php files mus abkekoppelt vom mainthread (asynchron)
passieren.
Dies bekommst du mit nem Async Task oder mit einem neuen Thread hin
passe aber auf, dass die Variablen zum Zeitpunkt des Abfragens synchron sind.
Mehr siehe hier:
https://www.nextpit.de/de/android/forum/thread/568854/Tutorial-Download-einer-Webseite

LG Pascal //It's not a bug, it's a feature. :) ;)

Antworten
Daniel H.
  • Forum-Beiträge: 17

10.04.2014, 20:12:53 via Website

Pascal P.
Du musst den Code in einen Anderen Thread auslagern, da eine Network on Main Exception erscheint.
Das heisst, das Laden des php files mus abkekoppelt vom mainthread (asynchron)
passieren.
Dies bekommst du mit nem Async Task oder mit einem neuen Thread hin
passe aber auf, dass die Variablen zum Zeitpunkt des Abfragens synchron sind.
Mehr siehe hier:
https://www.nextpit.de/de/android/forum/thread/568854/Tutorial-Download-einer-Webseite

Das habe ich eben bereits auch mitbekommen. Habe nur keinen Plan wie genau ich das auslagere usw.
Habe auch den Link bereits probiert, funktioniert leider auch nicht.

Grüße,
Daniel

Antworten
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

10.04.2014, 21:15:50 via App

Dann poste einfach mal den Code deiner Probe.

LG Pascal //It's not a bug, it's a feature. :) ;)

Antworten
Daniel H.
  • Forum-Beiträge: 17

10.04.2014, 21:59:01 via Website

Habe ich bereits, die LogCat wollte ich eigentlich auch posten, darf ich aber noch nicht, da ich neu hier bin. Bescheurte Regleung! Man darf eben als Neuling bei AndroiPit keine Link posten, und somit gehts leider nicht

Antworten
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

11.04.2014, 07:06:13 via App

Wieso in logcat ist doch kein link.
Einfach copy and paste in code tags.
Ggf den einen link rausschmeissen.
Ohne logcat ist es sehr schwieig dein Fehler zu finden.

LG Pascal //It's not a bug, it's a feature. :) ;)

Antworten
Daniel H.
  • Forum-Beiträge: 17

16.04.2014, 17:01:41 via Website

Habe es jetzt endlich zum laufen gebracht, Schuld wa angeblich eine falsche Platzierung der Internetpersmission in der AndroidManifest Datei.

--CLOSED--

— geändert am 16.04.2014, 17:02:42

Antworten