- Forum-Beiträge: 10
26.09.2013, 10:57:47 via Website
26.09.2013 10:57:47 via Website
steige gerade in das Programmiern von Android-Apps ein. Als eine der ersten kleinen Testapps versuche ich zur Zeit eine App zu schreiben, die Bilder aus dem Internet läd und anzeigt. Beim klicken auf das Bild soll das nächste Bild angezeigt werden. Komkret heißt das, dass beim Start das Bild mit der url: "irgendEineUrl/1.jpg" angezeigt wird, das nächste Bild wäre also entsprechend "irgendEineUrl2.jpg"
Das war soweit kein Problem und sieht bei mir in etwa so aus:
2
3 public int page = 1;
4 ImageView bild;
5
6 class ClickListener implements OnClickListener {
7
8 @Override
9 public void onClick(View v) {
10 NextImage nextImage = new NextImage(bild, MainActivity.this);
11 nextImage.execute(page);
12 }
13 }
14 }
15
16 @Override
17 protected void onCreate(Bundle savedInstanceState) {
18 super.onCreate(savedInstanceState);
19 setContentView(R.layout.activity_main);
20
21 bild = (ImageView) findViewById(R.id.mangaPage);
22 NextImage nextImage = new NextImage(bild, this);
23 nextImage.execute(page);
24
25 ClickListener bitmapClick = new ClickListener();
26 bild.setOnClickListener(bitmapClick);
27 }
mit
2
3 ImageView imageView;
4 MainActivity main;
5
6 public NextImage(ImageView imageView, MainActivity main) {
7 this.imageView = imageView;
8 this.main = main;
9 }
10
11 @Override
12 protected Bitmap doInBackground(Integer... page) {
13 String url;
14 Bitmap bitmap = null;
15 url = "irgendEineUrl" + page[0] + ".jpg"
16 try {
17 InputStream in = new BufferedInputStream(new URL(url).openStream());
18 bitmap = BitmapFactory.decodeStream(in);
19 in.close();
20 } catch (Exception e) {
21
22 e.printStackTrace();
23 }
24 return bitmap;
25 }
26
27 @Override
28 protected void onPostExecute(Bitmap result) {
29 main.page++;
30 imageView.setImageBitmap(result);
31
32 }
Soweit funktioniert das auch alles. Jetzt wollte ich meine App erweitern, so dass sie sofort mit dem Download des nächsten Bildes anfängt, sobald das letzte Bild angezeigt wird. Eben um die Zeit zum Download zu nutzen, während der Nutzer das letzte Bild bertrachtet und somit die Wartezeit bei schlechter Internetverbindung zu verbessern.
Meine Grundidee war folgende: Ich definiere in der MainActivity einfach eine Variable Bitmap nextImage = null
In der Klasse NextImage erweitere ich die Methode onPostExcecute, indem ich dort eine weitere AsyncTasc starte, welche das nächste Bild schonmal downloaded und in die Variable nextImage der MainActivity speichert.
Die oben gezeigt doInBackground müsste dann durch eine if Abrfage erweitert werden, so dass der Download nur stattfindet, wenn die Variable nextImage noch den Wert null hat. Ansonsten kann einfach direkt der Wert dieser Variable zurückgegeben werden.
Klappt so auch einigermaßen. Einziges Poblem: Reicht die Zeit bis zum nächsten Klick des Nutzers nicht aus, um das nächste Bild zu downloaden, hat die Variable nexImage natürlich noch den Wert null und somit beginnt der Download nochmals von vorne und der extra früher gestartete Download läuft theoretisch weiter, bleibt jedoch ungenutzt. Die Wartezeit auf das nächste Bild wird in diesem Fall also sogar länger.
Kann man meine Grundidee so anpassen, dass dieses Problem umgangen wird? Oder habt ihr bessere Vorschläge mein Vorhaben umzusetzen?
Meine Frage ist jetzt doch länger geworden als gedacht... Schonmal danke im Vorraus!
Empfohlener redaktioneller Inhalt
Mit Deiner Zustimmung wird hier ein externer Inhalt geladen.
Mit Klick auf den oben stehenden Button erklärst Du Dich damit einverstanden, dass Dir externe Inhalte angezeigt werden dürfen. Dabei können personenbezogene Daten an Drittanbieter übermittelt werden. Mehr Infos dazu findest Du in unserer Datenschutzerklärung.