[App] Eigener Stundenplaner

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

07.04.2013, 14:48:54 via Website

OK, was sagt jetzt LogCat?
Habe keine Ahnung wie so etwas passieren kann.
Wenn du die App mit Eclipse neu aufspielst, tut es dann wieder?
AVD hat halt manchmal Probleme, das darfst du nicht ernst nehmen.
Auf den Handy läufts devinitiv besser.

— geändert am 07.04.2013, 14:49:56

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

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

07.04.2013, 17:01:22 via Website

Also momentan funktioniert es wieder, deshalb kann ich jetzt auch nichts von LogCat posten.
Mal noch was anderes bei dem ich einen Denkanstoß von euch gebrauchen könnte. Ich versuch es mal zu beschreiben.
Der String den ich auslese hat folgenden Aufbau:
1<table>
2<tr01>
3 <td01>
4 </td01>
5 <td02>
6 Wert1
7 </td02>
8 <td03>
9 Wert2
10 </td03>
11 <td04>
12 Wert3
13 </td04>

14 <td05>
15 </td05>
16</tr01>
17<tr02>
18...
19</tr02>
20...
21</table>
Die Anzahl der <tr>-Tags ist unterschiedlich, sprich je nach Anzahl von Unterrichtsstunden hab ich dementsprechend eine Anzahl von <tr>-Tags im Quellcode.
Die Daten die ich benötige, befinden sich jeweils in den <td>-Tags die ich fett markiert habe. Wie könnte ich jetzt eine Methode schreiben bzw wie könnte sie aussehen, die mir unabhängig von der Anzahl der <tr>-Tags diese Werte zurückgibt. Kann man sowas gut mit Rekursion lösen?

— geändert am 07.04.2013, 17:02:34

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

08.04.2013, 14:53:31 via Website

Wenn ich mir mit dem Parser eine XML-Datei erstellt habe, wo speicher ich die intern am besten hin, bzw wo ist es erlaubt hinzuspeichern und wo nicht?

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

15.04.2013, 16:02:38 via Website

So ich steh mal wieder vor einem neuen Problem.
Ich lade mir in einer zweiten Activity den Quellcode der Seite herunter.
Und durchlaufen den mit einer While-Schleife.
Jedoch bekomme ich immer die Fehlermeldung "Activity is not responding".
Muss ich die ganze Verarbeitung des Quelltextes auch in nen Thread auslagern? Normalerweise sollte doch
so ne kleine While-Schleife da keine Probleme machen oder?

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

15.04.2013, 16:12:13 via Website

Du solltest das doch in einem Thread machen, das system ist mit der while schleife sehr beschäftigt.
Probier das mal mit vielleicht hilft das.

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

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

15.04.2013, 16:41:20 via Website

Ah ok, ich dachte das mit dem AsyncTask bezieht sich nur auf das "herunterladen" des Quellcodes von der Seite.
Zu dem AsyncTast hätte ich noch eine Frage. Ich beziehe den Quellcode gerade so:
1public class Seitenparser extends Activity implements Runnable {
2 ProgressDialog progress;
3 String result = null;
4 //String string_beschnitten_anfang_ende;
5 /** Called when the activity is first created. */
6 @Override
7 public void onCreate(Bundle savedInstanceState) {
8 super.onCreate(savedInstanceState);
9 setContentView(R.layout.parser);
10
11 //THREAD AUFRUFEN
12 initthread();
13 // TODO Auto-generated method stub
14 }
15
16 public void initthread(){
17 progress = new ProgressDialog(Seitenparser.this);
18 progress.setTitle("Hinweis");
19 progress.setMessage("Daten werden geladen");
20 progress.show();
21 Thread thread = new Thread(this);
22 thread.start();
23 }
24
25 public void run() {
26 initview();
27 handler.sendEmptyMessage(0);
28 }
29
30 private Handler handler = new Handler() {
31 @Override
32 public void handleMessage(Message ms) {
33 progress.dismiss();
34 TextView textView1 = (TextView) findViewById(R.id.textView1);
35 textView1.setText(result);
36 }
37 };
38
39 private void initview() {
40 result = doRequest();
41 }
42
43 private String doRequest() {
44 String result = null;
45 HttpResponse response = null;
46
47 HttpGet get = new HttpGet("http://google.de");
48 DefaultHttpClient client = new DefaultHttpClient();
49 ResponseHandler<String> responsehandler = new BasicResponseHandler();
50 try {
51 response = client.execute(get);
52 }
53 catch(ClientProtocolException e ) {
54 e.printStackTrace();
55 }
56 catch(IOException e) {
57 e.printStackTrace();
58 }
59
60 int statuscode = response.getStatusLine().getStatusCode();
61
62 if (statuscode == 200) {
63 try {
64 result = responsehandler.handleResponse(response);
65 }
66 catch(ClientProtocolException e){
67 e.printStackTrace();
68 }
69 catch(IOException e) {
70 e.printStackTrace();
71 }
72 }
73 return result;
74 }

Nur wenn ich danach etwas mit dem String machen will, passiert nichts. Wie kann ich den Prüfen ob der Thread noch läuft/ beendet ist? Ich hab da was mit "join" gelesen. Nur weiß ich nicht an welcher Stelle in dem Quelltext ich das prüfen kann?

— geändert am 15.04.2013, 16:42:40

Antworten
impjor
  • Forum-Beiträge: 1.793

15.04.2013, 17:09:49 via App

Ich denke in initview () nach
result = ...
sollte der Quelltext zur Verfügung stehen, oder? Dann kannst du doch genau dort weiter machen, oder? Wenn du Views aktualisieren willst, einfach via runOnUiThread machen.
Gruß

Liebe Grüße impjor.

Für ein gutes Miteinander: Unsere Regeln
Apps für jeden Einsatzzweck
Stellt eure App vor!

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

15.04.2013, 18:10:29 via Website

1if(!thread.isAlive())
2{
3//Wenn der thread nich mehr läuft
4
5}

Aber am Besten du nutzt ein Interface für ein Callback oder einen FutureTask.

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

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

15.04.2013, 18:21:43 via Website

Ich meinte für den AsyncTask.

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

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

15.04.2013, 20:40:05 via Website

Das dachte ich auch das ich in der initview() nach result weiter machen kann.
Doch wenn ich hingehe und einem anderem String "result" zuweise und diesen String dann einem neuen Textview zuweise bleibt das Textview leer.

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

16.04.2013, 14:08:19 via Website

Also der Download funktioniert 100%, ich bekomm den Inhalt ja in dem Textview angezeigt.
Ich müsste doch eigentlich nur prüfen ob der Thread abgeschlossen ist und wenn ich den Inhalt der Seite in dem String result gespeichert habe, dann ganz normal weiterarbeiten können?! Oder muss ich erst den Thread noch auf eine bestimmte Weise beenden?

— geändert am 16.04.2013, 15:40:09

Antworten
impjor
  • Forum-Beiträge: 1.793

16.04.2013, 16:12:46 via Website

Wo ist das Problem? Funktioniert doch alles gut.

1private Handler handler = new Handler() {
2 @Override
3public void handleMessage(Message ms) {
4 progress.dismiss();
5
6 verarbeiten_des_Quelltextes(result);
7 }
8 };

Thread wird automatisch beendet, wenn die run()-Methode zu ende ist.
Gruß

Liebe Grüße impjor.

Für ein gutes Miteinander: Unsere Regeln
Apps für jeden Einsatzzweck
Stellt eure App vor!

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

16.04.2013, 16:43:35 via Website

Hmm wenn ich das wüsste woran das gelegen hat, aber jetzt funktionierts :) Danke dir!
Woran es jetzt noch etwas harpert ist folgendes:
In der verarbeiten_des_Quelltextes()- Methode durchlaufe ich den String mit einer While-Schleife um mir die Infos rauszulesen, die ich benötige.
Nur hängt sich dadurch wie schon gesagt die ganze App auf.
Habe ich euch da richtig verstanden das ich jetzt diese Methode auch wieder in einen Task auslagern muss?

Antworten
impjor
  • Forum-Beiträge: 1.793

16.04.2013, 16:50:49 via Website

So eine while-Schleife sollte eigentlich kein Problem darstellen, wenn sie nicht unendlich läuft....
Vielleicht die Abbruch-Bedingung falsch geschireben o.ä. bzw. das LogCat sagt noch was. Generell spricht aber nichts dagegen diese Aufgabe im Download-Thread zu machen:
1public void run() {
2 initview();
3 verarbeite_Quelltext(result);
4
5// handler.sendEmptyMessage(0);
6 }

Gruß

Liebe Grüße impjor.

Für ein gutes Miteinander: Unsere Regeln
Apps für jeden Einsatzzweck
Stellt eure App vor!

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

18.04.2013, 16:28:44 via Website

So, meine App funktionert soweit :)
Leider klappt das mit dem Https-Login nicht :/
Hat jemand von euch noch eine Idee dazu?

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

18.04.2013, 20:54:32 via Website

Kennst du zufällig eine Seite auf der erklärt ist, was ich denn alles für so einen Https-Login benötige und welche Aufgaben die Komponenten übernehmen? Ich seh zwar bei deinem Tipp den ganzen Code, aber was die Aufgabe der einzelnen Komponenten ist bzw wie sie miteiander interagieren wird mir nicht klar :(

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

21.04.2013, 11:59:30 via Website

Mal wieder ne kleine Frage.
Meine App besteht aus 3 Aktivitis. Ich nenn sie jetzt mal A, B und C.
In A habe ich einen Button(AA) zum Anmelden und einen Button(AX) zum Anzeigen des Stundenplanss(falls dieser schon vorhanden ist). B zeigt mir meinen Stundenplan und C lädt und parst mir die Seite.
Wenn ich mich in A angemeldet habe, wird C aufgerufen(zum laden und parsen) und danach B um mir den Stundenplan anzugeigen.
Ich habe mir in B jetzt einen Button(BE) gesetzt der mich beim Betätigen nach A, also meine Startseite zurückbringt.
Wenn ich jetzt BE drücke befinde ich mich wieder auf meiner Startseite. Drücke ich jetz den, ich nenn ihn mal, Hardware-Backbuton meines Smartphones drücke, wird nicht wie geplant meine App geschlossen sondern ich mache einen Schritt zurück in meine C-Activity.

Wo liegt da der Fehler, bzw wie kann ich es lösen das mir die App geschlossen wird und ich nicht einen Schritt zurück mache?

Ich bin jetzt hingegangen und beende jede Activity mit finish(); bevor ich eine neue Activity aufrufe. Gibt es da vll noch nen eleganteren Weg?

— geändert am 21.04.2013, 12:30:12

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

21.04.2013, 12:49:10 via App

Nein der Hardware BackButton ( mit dem Pfeil oä
schliesst die aktuelle Aktivity und leitet dich zurück zur letzten.
Du kannst die Fubktin des Buttons auch mit onBackPressed überschreiben.
Ich weiss jetzt nicht, was dich daran stört.Dieses.verhalten der.App ist bei mehreren Activities.normal.

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

Antworten
impjor
  • Forum-Beiträge: 1.793

21.04.2013, 12:56:53 via App

Warum ist C eine Activity, wenn sie nur Daten aus den Internet holt und dann zu B weiterleitet? Da machst du etwas falsch....

Gruß

Liebe Grüße impjor.

Für ein gutes Miteinander: Unsere Regeln
Apps für jeden Einsatzzweck
Stellt eure App vor!

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

21.04.2013, 13:00:13 via App

Es muss keine Activity sein sodern nur eine Klasse.
Dann ists einfacher.

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

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

21.04.2013, 13:47:13 via Website

Edit: Hat sich den ich erledigt^^

— geändert am 21.04.2013, 14:36:12

Antworten