Download funktioniert nicht

  • Antworten:36
  • OffenNicht stickyBentwortet
  • Forum-Beiträge: 147

01.01.2014 23:51:04 via Website

Nach langer Suche habe ich jetzt etwas gefunden!
http: //acadopus.de/android/die-ausfuehrung-der-aufgaben-im-hintergrund_0016.html
Würde es funktionieren, wenn ich den Code von developer-blog.net dort einbaue?
Den Code vom developer-blog finde ich einfach verständlicher.
  • Forum-Beiträge: 147

01.01.2014 23:58:59 via Website

Ich habe es jetzt ausprobiert.
1final Handler myHandler = new Handler(); // wird automatisch mit aktuellem Thread vebunden.
2 final TextView txtResult = (TextView)findViewById(R.id.webkonsoleVersion);
3 Thread myThread = new Thread(new Runnable() {
4 final String result = downloadWebVersion();
5 myHandler.post(new Runnable() { // Handler benutzen, der mitк UI-Thread verbunden ist
6 @Override
7 public void run() {
8 txtResult.setText(result); // Element ändern
9 }
10 });
11 });
Da kommt jetzt nur 2 Fehler. Auf Zeile 5: Multiple markers at this line
- Syntax error on tokens, AnnotationName expected instead
- Syntax error on tokens, ConstructorHeaderName expected
instead
und auf Zeile 11: Syntax error on token "}", delete this token. Aber das "}" muss doch dort hin? :mad:
  • Forum-Beiträge: 26

02.01.2014 11:15:39 via App

Der jetzige Code im Tutorial sollte funktionieren. Wichtig ist, dass du, wenn du es kopierst auch die Klassen Definition (public class Downloader extends AsyncTask<...> ) mit kopierst. Das tutorial wurde im Laufe der Zeit geändert. schau es dir am besten nochmal an. kann nämlich sein, dass du zwar die neue Version benutzt, aber sie als die alte Version behandelst (instanzierung etc.)
  • Forum-Beiträge: 147

02.01.2014 17:19:55 via Website

Stehpan Graf
Wichtig ist, dass du, wenn du es kopierst auch die Klassen Definition (public class Downloader extends AsyncTask<...> ) mit kopierst.
Das hab ich gemacht.
Stephan Graf
Das tutorial wurde im Laufe der Zeit geändert. schau es dir am besten nochmal an. kann nämlich sein, dass du zwar die neue Version benutzt, aber sie als die alte Version behandelst (instanzierung etc.)
Das Tutorial ist wohl teilweise falsch??:unsure:
  • Forum-Beiträge: 147

02.01.2014 17:33:54 via Website

Also ich habe jetzt die Downloader.java kopiert und in meiner Activity habe ich:
1private void startDownload() {
2 Downloader.DownloadCompleteListener dcl = new Downloader.DownloadCompleteListener();
3 @Override
4 public void onDownloadComplete(String result) {
5 TextView tv = (TextView) findViewById(R.id.webkonsoleVersion);
6 tv.setText(result);
7 }
8 );
9
10 Downloader downloader = new Downloader(dcl);
11 downloader.execute("Eine URL, die geladen werden soll");
12 }
Dabei habe ich in Zeile 2 hinten noch ");" angehängt. Ich hoffe das ist so richtig...
Dann habe ich jetzt auf Zeile 2 den Fehler "Cannot instantiate the type Downloader.DownloadCompleteListener". Muss ich die Downloader.java irgendwo einbinden?
Auf Zeile 4 habe ich den Fehler "Multiple markers at this line
- void is an invalid type for the variable
onDownloadComplete
- Syntax error on token ")", ; expected
- Syntax error on token "(", ; expected". Muss ich da "public String ..." schreiben?
Und den Fehler auf Zeile 8 versteh ich überhaupt nicht: "Syntax error on token ")", delete this token".
  • Forum-Beiträge: 86

02.01.2014 17:48:38 via Website

1Dabei habe ich in Zeile 2 hinten noch ");" angehängt. Ich hoffe das ist so richtig...

aeh nein ... du schachtelst falsch -> du kreierst eine "innere" Klassen bzw. ein neues Objekt und hast dabei Klammern vergessen / falsch gesetzt, daher die multiplen Marker

Downloader.DownloadCompleteListener dcl = new Downloader.DownloadCompleteListener()
{
so sollte es gehen
};
  • Forum-Beiträge: 147

02.01.2014 17:54:02 via Website

Super. Danke!
Wenn ich jetzt, nach Anweisung von Eclipse, auf Zeile 8 die ")" in eine "}" ändere kommt kein Fehler mehr.
Jetzt muss ich nur noch testen ob es funktioniert. Ich werde mich melden.
  • Forum-Beiträge: 147

02.01.2014 17:56:55 via Website

Super. Danke!
Wenn ich jetzt, nach Anweisung von Eclipse, auf Zeile 8 die ")" in eine "}" ändere kommt kein Fehler mehr.
  • Forum-Beiträge: 147

02.01.2014 18:22:02 via Website

Ich hätte da jetzt noch eine Frage: Wie kann ich einen Fehler behandeln? Also das wenn ein Fehler auftritt in die TextView "Fehler!" geschrieben wird.
Pascal P.
  • Mod
  • Blogger
  • Forum-Beiträge: 9.215

02.01.2014 19:32:54 via Website

Normalerweise macht man das mit try und "catched" dann die Exceptions.
In so einem Catch kannst du dann den Fehler in LogCat und/oder in einer TextBox ausgeben

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

  • Forum-Beiträge: 147

03.01.2014 18:11:55 via Website

Im catch() muss ich ja angeben für welche Exception der Block ausgeführt wird. Wie muss ich den catch-Block schreiben, wenn er bei allen Exceptions ausgeführt werden soll?
Pascal P.
  • Mod
  • Blogger
  • Forum-Beiträge: 9.215

03.01.2014 18:17:13 via Website

dann allgemein mit
1try{
2//do your things
3}
4catch(Exception e)
5{
6//Auswertung von e oder
7Log.d("Fehler",e.toString());
8}
Aber normalerweise nimmt man absichlich verschiedene Exceptions, damit man sie sofort Unterscheiden kann

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

  • Forum-Beiträge: 147

03.01.2014 18:25:23 via Website

Das ist egal. Hauptsache die App stürtzt nicht ab. Ich zeige dem Nutzer sowieso nur ein rotes X mit dem Text "Es ist ein Fehler aufgetreten" an...
Pascal P.
  • Mod
  • Blogger
  • Forum-Beiträge: 9.215

03.01.2014 22:22:08 via Website

Kein Problem!

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