Bilder aus Url laden

  • Antworten:5
Christian Keusch
  • Forum-Beiträge: 14

25.02.2014, 14:34:18 via Website

Hallo,
ich würde gerne in einer App Bilder meiner Homepage anzeigen lassen. Dazu hab ich ein Beispiel im Internet gefunden, das funktionieren sollte:

1package com.example.flora_austriaca_quiz;
2import java.io.InputStream;
3import java.net.URL;
4import android.os.Bundle;
5import android.app.Activity;
6import android.graphics.drawable.Drawable;
7import android.view.Menu;
8import android.widget.ImageView;
9
10public class MainActivity extends Activity {
11
12 @Override
13 protected void onCreate(Bundle savedInstanceState) {
14 super.onCreate(savedInstanceState);
15 setContentView(R.layout.activity_main);
16
17 ImageView iv = (ImageView) findViewById(R.id.imageView1);
18 iv.setImageDrawable(setCaptcha("bildadresse"));
19
20 }
21
22 @Override
23 public boolean onCreateOptionsMenu(Menu menu) {
24 // Inflate the menu; this adds items to the action bar if it is present.
25 getMenuInflater().inflate(R.menu.main, menu);
26 return true;
27 }
28
29 private Drawable setCaptcha(String url2) {
30 if (!url2.equals("")) {
31 try {
32 URL url = new URL(url2);
33 InputStream is = (InputStream) url.getContent();
34 Drawable d = Drawable.createFromStream(is, "src");
35
36 return d;
37 } catch (Exception e) {
38 return null;
39 }
40 } else {
41 return null;
42 }
43 }
44}

Die Internet Persmission ist gesetzt!
Es kommt keine Fehlermeldung aber es erscheint kein Bild??

Vielen Dank!

Antworten
impjor
  • Forum-Beiträge: 1.793

25.02.2014, 14:58:19 via Website

Christian Keusch

1try {
2 ...
3 } catch (Exception e) {
4 return null;
5 }

Es kommt keine Fehlermeldung[...]
Ist auch kein Wunder:P

Bitte niemals, niemals, niemals einen catch-Block so leer lassen. Mindestend ein e.printStackTrace(), besser noch zusätzlich Log.e().

LG

PS: Die Exception wird eine NetworkOnMainThreadException sein... einfach mal Google befragen oder hier im Forum schauen (z.B. hier).

Liebe Grüße impjor.

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

Antworten
Christian Keusch
  • Forum-Beiträge: 14

25.02.2014, 20:21:10 via Website

Danke!
voll ins Schwarze getroffen! Ich habe nun zwei Beispiele aus dem Internet probiert die angeblich funktionieren, eines davon sogar mit Video. Beide werfen bei mir die NetworkOnMainThreadException aus!
Wie immer ist es doch komplizierter als gedacht ;-(

MfG, Christian.

Antworten
impjor
  • Forum-Beiträge: 1.793

25.02.2014, 20:33:32 via App

Dann sind die Tutorials nicht mehr aktuell...

Kurz gesagt: Threading sollte dir ein Begriff sein, sonst wirds noch komplizierter. Du benötigst einen Thread, damit du die Webseite herunterladen kannst, ohne dass der Main-Thread gestört wird. Diesen bekommst du, indem du eine Klasse erstellst die von Thread oder AsyncTask erbt. Dort die run() bzw. doInBackground überschreiben und die Webseite downloaden. Beim AsyncTask dann in der onPostExecute das Bild anzeigen, beim Thread ist es ein bisschen komplizierter, da muss man sich mit einem Handler#post(..) oder Activity#runOnUithread() behelfen....

LG

Liebe Grüße impjor.

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

Antworten
Christian Keusch
  • Forum-Beiträge: 14

25.02.2014, 20:50:09 via Website

impjor
Dann sind die Tutorials nicht mehr aktuell...
Ja scheint so, dann wenn ich das Api Level 10 verwende und den entsprechenden Emulator funktionieren beide Varianten.
Ich werd dann wohl einen separaten Thread anlegen.
Danke!

Antworten
Christian Keusch
  • Forum-Beiträge: 14

26.02.2014, 12:12:02 via Website

Vielen Dank nochmal!
Ich habe es jetzt mittels AsyncTask gelöst und es funktioniert!
Jetzt weiß ich endlich warum andere Apps mit ähnlichen Funktionen nur unter Api Level 9 liefen!!

LG, Christian.

Antworten