Bild Download geht nicht

  • Antworten:11
Philipp K
  • Forum-Beiträge: 27

30.08.2010, 19:02:21 via Website

Hallo!! Lerne mich gerade in die Android SDK ein und habe ein Problem bei einer App!!
Ich müchte einfach ein Bild vom Inet downloaden und anzeigen.
1package com.example;
2
3import java.io.InputStream;
4import java.net.URL;
5import javax.net.ssl.HttpsURLConnection;
6
7import android.app.Activity;
8import android.graphics.Bitmap;
9import android.graphics.BitmapFactory;
10import android.os.Bundle;
11import android.view.View;
12import android.view.View.OnClickListener;
13import android.widget.Button;
14import android.widget.ImageView;
15
16public class example extends Activity {
17 /** Called when the activity is first created. */
18 @Override
19 public void onCreate(Bundle savedInstanceState) {
20 super.onCreate(savedInstanceState);
21 setContentView(R.layout.main);
22 final Button bt = (Button)this.findViewById(R.id.Button01);
23 bt.setOnClickListener(new OnClickListener() {
24
25 public void onClick(View v) {
26 bt.setVisibility(4);
27 Bitmap bmImg;
28 ImageView iv = (ImageView)example.this.findViewById(R.id.ImageView01);
29 URL imgurl = null;
30 try
31 {
32 imgurl = new URL("http://androidwizard.net/wp-content/woo_uploads/3-androidheadertest.png");
33 }
34 catch (Exception e) {
35 // TODO: handle exception
36 }
37 try
38 {
39 HttpsURLConnection conn = (HttpsURLConnection) imgurl.openConnection();
40 conn.setDoInput(true);
41 conn.connect();
42 int length = conn.getContentLength();
43 InputStream is = conn.getInputStream();
44 bmImg = BitmapFactory.decodeStream(is);
45 iv.setImageBitmap(bmImg);
46
47 }
48 catch (Exception e) {
49 // TODO: handle exception
50 }
51 }
52 });
53
54 }
55
56}

Antworten
Mac Systems
  • Forum-Beiträge: 1.727

30.08.2010, 21:33:56 via Website

Du hast vergessen zu sagen WAS nicht geht!

Fehlermeldungen ? FC Dialoge ?

PS: Bitte gebe die Exceptions auch aus die dein Code momentan ignoriert!

— geändert am 30.08.2010, 21:34:50

Windmate HD, See you @ IO 14 , Worked on Wundercar, Glass V3, LG G Watch, Moto 360, Android TV

Antworten
Philipp K
  • Forum-Beiträge: 27

31.08.2010, 12:36:34 via Website

es kommt keine fehlermeldung das bild wird einfach nicht angezeigt....

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

31.08.2010, 12:59:34 via Website

Hallo Philipp,

Du wirst mit an Sicherheit grenzender Wahrscheinlichkeit Fehlermeldungen im Logcat bekommen! Vermutlich nicht auf der Oberfläche der App ... Aber im Logcat sicher!

Schon alleine deshalb, weil du versuchst eine normale HTTP-Url mit der HTTPS Methode zu öffnen. Versuchs mal mit der entsprechenden HTTP Methode. BEi der von Dir verwendeten HttpsURLConnection wird er kein Zertifikat unter der URL http://androidwizard.net finden.

Dir App scheitert hier schon beim SSL Handshake der gar nicht zustande kommt.

lg Voss

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

31.08.2010, 13:09:22 via Website

Naja, aber wie Mac Systems schon sagte:

1catch (Exception e) {
2 //TODO: handle exception
3}

Bei so etwas braucht man sich dann nicht wundern, wenn keine Fehlermeldungen zu sehen sind !

— geändert am 31.08.2010, 13:09:49

Antworten
Philipp K
  • Forum-Beiträge: 27

31.08.2010, 13:43:51 via Website

so habe jetzt meinen Code überarbeitet jedoch geht es noch immer nicht und jetzt zeigt mein handy den button auch nicht mehr an..
1package com.viewpicture;
2
3import java.io.InputStream;
4import java.net.URL;
5import java.util.logging.ConsoleHandler;
6
7import javax.net.ssl.HttpsURLConnection;
8
9import android.app.Activity;
10import android.graphics.Bitmap;
11import android.graphics.BitmapFactory;
12import android.graphics.drawable.GradientDrawable.Orientation;
13import android.os.Bundle;
14import android.util.Log;
15import android.view.View;
16import android.view.View.OnClickListener;
17import android.widget.Button;
18import android.widget.ImageView;
19import android.widget.LinearLayout;
20
21public class viewpicture extends Activity {
22 /** Called when the activity is first created. */
23 @Override
24 public void onCreate(Bundle savedInstanceState) {
25 super.onCreate(savedInstanceState);
26 //setContentView(R.layout.main);
27 LinearLayout ll = new LinearLayout(this);
28 ll.setOrientation(LinearLayout.VERTICAL);
29 final Button bt = (Button)this.findViewById(R.id.Button01);
30 final ImageView iv = (ImageView)viewpicture.this.findViewById(R.id.ImageView01);
31 ll.addView(bt);
32 ll.addView(iv);
33 setContentView(ll);
34 bt.setOnClickListener(new OnClickListener() {
35
36 public void onClick(View v) {
37 Bitmap bmImg;
38 URL imgurl = null;
39 try
40 {
41 imgurl = new URL("http://androidwizard.net/wp-content/woo_uploads/3-androidheadertest.png");
42 }
43 catch (Exception e) {
44 Log.v("URL FAIL", "msg");
45 }
46 try
47 {
48 HttpsURLConnection conn = (HttpsURLConnection) imgurl.openConnection();
49 conn.setDoInput(true);
50 conn.connect();
51 int length = conn.getContentLength();
52 InputStream is = conn.getInputStream();
53 bmImg = BitmapFactory.decodeStream(is);
54 iv.setImageBitmap(bmImg);
55 //setContentView(iv);
56
57 }
58 catch (Exception e) {
59 Log.v("FAIL", "msg");
60 }
61 }
62 });
63
64 }
65
66}

Antworten
Mac Systems
  • Forum-Beiträge: 1.727

31.08.2010, 14:34:44 via Website

Wann gewöhnen sich die Leute dieses "geht nicht" ab ? Das bringt uns meist gar nichts! Hast du nun Fehler auf der Konsole oder nicht ?

Für den Anfang solltest du einfach mal ein e.printStackTrace(); anstelle den Loggen einsetzen. Zumal verbose sicher an der stelle nicht gerade das ist was genutzt werden sollte!

— geändert am 31.08.2010, 15:27:17

Windmate HD, See you @ IO 14 , Worked on Wundercar, Glass V3, LG G Watch, Moto 360, Android TV

Antworten
Philipp K
  • Forum-Beiträge: 27

31.08.2010, 15:05:54 via Website

habe es ausgetauscht

Console:
1[2010-08-31 15:04:51 - ViewPicture] Android Launch!
2[2010-08-31 15:04:51 - ViewPicture] adb is running normally.
3[2010-08-31 15:04:51 - ViewPicture] Performing com.viewpicture.viewpicture activity launch
4[2010-08-31 15:04:51 - ViewPicture] Automatic Target Mode: using device '9000ba90a038'
5[2010-08-31 15:04:52 - ViewPicture] Application already deployed. No need to reinstall.
6[2010-08-31 15:04:52 - ViewPicture] Starting activity com.viewpicture.viewpicture on device
7[2010-08-31 15:04:52 - ViewPicture] ActivityManager: Starting: Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] cmp=com.viewpicture/.viewpicture }

Antworten
Jochen Rühl
  • Forum-Beiträge: 133

31.08.2010, 15:15:51 via Website

Hi,

hast Du, wie von Jörg geschrieben, aus Deiner HttpsURLConnection eine HttpURLConnection gemacht?

Gruß
Jochen

Antworten
Philipp K
  • Forum-Beiträge: 27

31.08.2010, 15:32:15 via Website

ja
1package com.viewpicture;
2
3import java.io.InputStream;
4import java.net.HttpURLConnection;
5import java.net.URL;
6import android.app.Activity;
7import android.graphics.Bitmap;
8import android.graphics.BitmapFactory;
9import android.os.Bundle;
10import android.view.View;
11import android.view.View.OnClickListener;
12import android.widget.Button;
13import android.widget.ImageView;
14import android.widget.LinearLayout;
15
16public class viewpicture extends Activity {
17 /** Called when the activity is first created. */
18 @Override
19 public void onCreate(Bundle savedInstanceState) {
20 super.onCreate(savedInstanceState);
21 //setContentView(R.layout.main);
22 LinearLayout ll = new LinearLayout(this);
23 ll.setOrientation(LinearLayout.VERTICAL);
24 final Button bt = new Button (this);
25 final ImageView iv = new ImageView(this);
26 ll.addView(bt);
27 ll.addView(iv);
28 setContentView(ll);
29 bt.setOnClickListener(new OnClickListener() {
30
31 public void onClick(View v) {
32 Bitmap bmImg;
33 URL imgurl = null;
34 try
35 {
36 imgurl = new URL("http://androidwizard.net/wp-content/woo_uploads/3-androidheadertest.png");
37 }
38 catch (Exception e) {
39 e.printStackTrace();
40 }
41 try
42 {
43 HttpURLConnection conn = (HttpURLConnection) imgurl.openConnection();
44 conn.setDoInput(true);
45 conn.connect();
46 int length = conn.getContentLength();
47 InputStream is = conn.getInputStream();
48 bmImg = BitmapFactory.decodeStream(is);
49 iv.setImageBitmap(bmImg);
50 setContentView(iv);
51
52 }
53 catch (Exception e) {
54 e.printStackTrace();
55 }
56 }
57 });
58
59 }
60
61}

Manifest
1<?xml version="1.0" encoding="utf-8"?>
2<manifest xmlns:android="http://schemas.android.com/apk/res/android"
3 package="com.viewpicture"
4 android:versionCode="1"
5 android:versionName="1.0">
6 <application android:icon="@drawable/icon" android:label="@string/app_name">
7 <activity android:name=".viewpicture"
8 android:label="@string/app_name">
9 <intent-filter>
10 <action android:name="android.intent.action.MAIN" />
11 <category android:name="android.intent.category.LAUNCHER" />
12 </intent-filter>
13 </activity>
14
15 </application>
16 <uses-sdk android:minSdkVersion="7" />
17 <uses-permission android:name="android.permission.INTERNET"></uses-permission>
18 <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"></uses-permission>
19 <uses-permission android:name="android.permission.READ_PHONE_STATE"></uses-permission>
20 <uses-sdk android:minSdkVersion="1" />
21
22</manifest>

— geändert am 31.08.2010, 15:32:56

Antworten
Jochen Rühl
  • Forum-Beiträge: 133

31.08.2010, 16:56:56 via Website

Hi,

also im LogCat steht eine Exception, nämlich diese hier:

1W/System.err( 3368): java.lang.IllegalStateException: The specified child already has a parent. You must call removeView() on the child's parent first.

Kommentiere mal die Zeile 50 aus, dann sollte es funktionieren.

Gruß
Jochen

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

31.08.2010, 18:27:42 via Website

Sebastian N.
Naja, aber wie Mac Systems schon sagte:

1catch (Exception e) {
2 //TODO: handle exception
3}

Bei so etwas braucht man sich dann nicht wundern, wenn keine Fehlermeldungen zu sehen sind !

Soweit hatte ich noch nicht einmal geschaut .. ich hab nur die fehlerhafte Verwendung der HttpsUrlConnection bemerkt. :)

Das hätte, korrekten Stacktrace ausgegeben eine ClassCast Exeption ausgeworfen.

Btw. Philipp .. benutze die Log Ausgabe, nicht die Console. Im Log steht das drinnen was Du als Entwickler wissen musst. Das Log findest Du unter Eclipse in der DDMS Perspective unter LogCat.

— geändert am 31.08.2010, 18:30:58

lg Voss

Antworten