MySQL werte in ListView wird nicht angeszeigt ?? Warum ??

  • 3 Antworten
  • Letztes Antwortdatum
hunter123

hunter123

Neues Mitglied
0
Hallo zusammen,

ich mache zurzeit eine app, wo Werte die ich in meiner MySQL Datenbank angelegt habe ausliest und diese in meiner ListView angezeigt werden sollen. Ich weis nicht warum die Werte die ich empfange nicht in der ListView angezeigt werden .. habe schon alles ausprobiert und sogar LogCat zeigt kein fehler an! sitze schon 2 stunden drann und komm einfach nicht drauf woran es liegen könnte


In meiner MainActivity ruf ich die methode getData() auf:

Code:
public void sendlogin(View v){
		setContentView(R.layout.daten_layout);
		
		Verbindung ver = new Verbindung();
		ver.getData();
		
	}

Hier meine SQL Anweisung in der Klasse "Verbindung":
Code:
public class Verbindung extends ListActivity {
	
	// TODO Auto-generated constructor stub

	InputStream is;
	ArrayList<String> results = new ArrayList<String>();
	JSONObject json_data;
	boolean dataComplete = false;
	
	@Override
	 public void onCreate(Bundle savedInstanceState) {
	 super.onCreate(savedInstanceState);
	 
	 getData();

	 while(!this.dataComplete) 
		 // es soll solange gewartet werden bis die ArrayList ganz 
           gefuellt ist und die Abfrage beendet wurde
		 	 {
		 	 try {
		 	 Thread.sleep(50);
		 	 } catch (InterruptedException e) {
		 	 // TODO Auto-generated catch block
		  e.printStackTrace();
		  }
		 }
	 this.fillList();
	  }
	 	
	 	public void getData() {
	 	
	 	 Thread t = new Thread() {
	 	
	 	 private String result = "";
		
	 	 public void run()
	 	 {
	 	 ArrayList<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();
	 	
	 	 try{
	 	 HttpClient httpclient = new DefaultHttpClient();
	 	 HttpPost httppost = new     HttpPost("http://meinehompage/conn.php");
	 	 httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
	 	 HttpResponse response = httpclient.execute(httppost);
	 	 HttpEntity entity = response.getEntity();
		 is = entity.getContent();
	 	 }
	 	 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());
	 	 }
	 	
	 	 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("vorname"));
	 	
	 	 }
	 	 
	 	 dataComplete = true;
	 	 }
	 	 catch(JSONException e){
	 	 Log.e("log_tag", "Error parsing data "+e.toString());
		 }
		 }
	 	
	 	
	 	 };
	 
	 	 t.start();
	 	}
	 	
	 	public void fillList() {
	 		
	 		this.setListAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, results));
	 	 }
}

Bitte um hilfe
 
Du bist ja eine Marke. Da verbietet Android Netzwerkzugriffe im GUI-Thread, damit die Apps nicht "hängen" und was machst Du? Du startest nen Thread und blockst dann den GUI Thread. Böseböseböse. :D

Nimm lieber einen AsyncTask (Beispiele googeln kannst du selber :)), packe den Krams aus getData ins doInBackground und übergebe das Ergebnis im onPostExecute and den ListView. Wenn Du die GUI blockieren musst, solltest du einen ProgressDialog anzeigen.

Weisst du überhaupt, ob die Http Verbindung das gewünschte Ergebnis liefert? (Zwischenergebnisse loggen).

HTH
 
Zuletzt bearbeitet:
  • Danke
Reaktionen: hunter123
new Verbindung() ist definitiv falsch, da Verbindung bei dir eine List Activity ist.

Acitivites sollte man nie mit new instanzieren.
Beispielsweise wird onCreate() niemals aufgerufen in der Verbindungsklasse.

Das was @DieGoldeneMitte sagt hab ich gar nicht mehr gesehen.. ohje.. da liegt einiges im argen du solltest dich nochmal in die grundlagen einarbeiten.
 
DieGoldeneMitte schrieb:
Du bist ja eine Marke. Da verbietet Android Netzwerkzugriffe im GUI-Thread, damit die Apps nicht "hängen" und was machst Du? Du startest nen Thread und blockst dann den GUI Thread. Böseböseböse. :D

Nimm lieber einen AsyncTask (Beispiele googeln kannst du selber :)), packe den Krams aus getData ins doInBackground und übergebe das Ergebnis im onPostExecute and den ListView. Wenn Du die GUI blockieren musst, solltest du einen ProgressDialog anzeigen.

Weisst du überhaupt, ob die Http Verbindung das gewünschte Ergebnis liefert? (Zwischenergebnisse loggen).

HTH


Danke für die Antwort :)

Ich hab mich grad bisschen in AsyncTask eingelesen und auf diese Website hier gestoßen: Android Remote Database Access Using AsyncTask ich denk mal dort steht alles was ich so brauch :thumbsup:
 
Zurück
Oben Unten