2012-01-02 15 views
2

私はここで間違っているのか分かりません - 私がそのセクションをコメントアウトしたときにアプリケーションが強制終了しないので、何かがfetch()に間違っているようですそしてそれが必要なものは、もちろん戻り値です)。ウェブからImageViewに.jpgを表示

もしあなたがすべて役に立ちそうなら、もう一組の目を使うことができます:)!これは私の主なアクティビティのクラス内にあります。 image.xml(R.layout.image)であるが、「imageView1」という名前だけでImageViewのを持っている

public void toastGallery(View v) 
{ 
    setContentView(R.layout.image); 
    String uri = "http://www.prelovac.com/vladimir/wp-content/uploads/2008/03/example.jpg"; 
    try 
    { 
     Context context = v.getContext(); 
     InputStream is = (InputStream) fetch(uri); 
     Drawable d = Drawable.createFromStream(is, "src"); 
     ImageView imgView = new ImageView(context); 
     imgView = (ImageView)findViewById(R.id.imageView1); 
     imgView.setImageDrawable(d); 
    } catch (MalformedURLException e) { 
     e.printStackTrace(); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 

} 
public Object fetch(String address) throws MalformedURLException,IOException { 
     URL url = new URL(address); 
     Object content = url.getContent(); 
     return content;  
} 

Logcat情報 - 私をそうでない場合は修正してください - 私は、スタックトレース出力がどここれは推測しています!

01-02 11:59:09.248: D/gralloc_goldfish(971): Emulator without GPU emulation detected. 
01-02 11:59:10.088: D/AndroidRuntime(971): Shutting down VM 
01-02 11:59:10.088: W/dalvikvm(971): threadid=1: thread exiting with uncaught exception (group=0x409c01f8) 
01-02 11:59:10.128: E/AndroidRuntime(971): FATAL EXCEPTION: main 
01-02 11:59:10.128: E/AndroidRuntime(971): java.lang.IllegalStateException: Could not execute method of the activity 
01-02 11:59:10.128: E/AndroidRuntime(971): at android.view.View$1.onClick(View.java:3044) 
01-02 11:59:10.128: E/AndroidRuntime(971): at android.view.View.performClick(View.java:3511) 
01-02 11:59:10.128: E/AndroidRuntime(971): at android.view.View$PerformClick.run(View.java:14105) 
01-02 11:59:10.128: E/AndroidRuntime(971): at android.os.Handler.handleCallback(Handler.java:605) 
01-02 11:59:10.128: E/AndroidRuntime(971): at android.os.Handler.dispatchMessage(Handler.java:92) 
01-02 11:59:10.128: E/AndroidRuntime(971): at android.os.Looper.loop(Looper.java:137) 
01-02 11:59:10.128: E/AndroidRuntime(971): at android.app.ActivityThread.main(ActivityThread.java:4424) 
01-02 11:59:10.128: E/AndroidRuntime(971): at java.lang.reflect.Method.invokeNative(Native Method) 
01-02 11:59:10.128: E/AndroidRuntime(971): at java.lang.reflect.Method.invoke(Method.java:511) 
01-02 11:59:10.128: E/AndroidRuntime(971): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784) 
01-02 11:59:10.128: E/AndroidRuntime(971): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551) 
01-02 11:59:10.128: E/AndroidRuntime(971): at dalvik.system.NativeStart.main(Native Method) 
01-02 11:59:10.128: E/AndroidRuntime(971): Caused by: java.lang.reflect.InvocationTargetException 
01-02 11:59:10.128: E/AndroidRuntime(971): at java.lang.reflect.Method.invokeNative(Native Method) 
01-02 11:59:10.128: E/AndroidRuntime(971): at java.lang.reflect.Method.invoke(Method.java:511) 
01-02 11:59:10.128: E/AndroidRuntime(971): at android.view.View$1.onClick(View.java:3039) 
01-02 11:59:10.128: E/AndroidRuntime(971): ... 11 more 
01-02 11:59:10.128: E/AndroidRuntime(971): Caused by: android.os.NetworkOnMainThreadException 
01-02 11:59:10.128: E/AndroidRuntime(971): at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1099) 
01-02 11:59:10.128: E/AndroidRuntime(971): at java.net.InetAddress.lookupHostByName(InetAddress.java:391) 
01-02 11:59:10.128: E/AndroidRuntime(971): at java.net.InetAddress.getAllByNameImpl(InetAddress.java:242) 
01-02 11:59:10.128: E/AndroidRuntime(971): at java.net.InetAddress.getAllByName(InetAddress.java:220) 
01-02 11:59:10.128: E/AndroidRuntime(971): at libcore.net.http.HttpConnection.<init>(HttpConnection.java:71) 
01-02 11:59:10.128: E/AndroidRuntime(971): at libcore.net.http.HttpConnection.<init>(HttpConnection.java:50) 
01-02 11:59:10.128: E/AndroidRuntime(971): at libcore.net.http.HttpConnection$Address.connect(HttpConnection.java:351) 
01-02 11:59:10.128: E/AndroidRuntime(971): at libcore.net.http.HttpConnectionPool.get(HttpConnectionPool.java:86) 
01-02 11:59:10.128: E/AndroidRuntime(971): at libcore.net.http.HttpConnection.connect(HttpConnection.java:128) 
01-02 11:59:10.128: E/AndroidRuntime(971): at libcore.net.http.HttpEngine.openSocketConnection(HttpEngine.java:308) 
01-02 11:59:10.128: E/AndroidRuntime(971): at libcore.net.http.HttpEngine.connect(HttpEngine.java:303) 
01-02 11:59:10.128: E/AndroidRuntime(971): at libcore.net.http.HttpEngine.sendSocketRequest(HttpEngine.java:282) 
01-02 11:59:10.128: E/AndroidRuntime(971): at libcore.net.http.HttpEngine.sendRequest(HttpEngine.java:232) 
01-02 11:59:10.128: E/AndroidRuntime(971): at libcore.net.http.HttpURLConnectionImpl.connect(HttpURLConnectionImpl.java:80) 
01-02 11:59:10.128: E/AndroidRuntime(971): at java.net.URLConnection.getContent(URLConnection.java:194) 
01-02 11:59:10.128: E/AndroidRuntime(971): at java.net.URL.getContent(URL.java:447) 
01-02 11:59:10.128: E/AndroidRuntime(971): at com.tjbiddle.puppywood.PuppyWood.fetch(PuppyWood.java:58) 
01-02 11:59:10.128: E/AndroidRuntime(971): at com.tjbiddle.puppywood.PuppyWood.toastGallery(PuppyWood.java:44) 
01-02 11:59:10.128: E/AndroidRuntime(971): ... 14 more 
+0

Androidのどのバージョンですか? –

+0

エミュレータを使用すると、ジンジャーブレッド(2.3.3)のすべてのビルドが作成されます 適切な方法を見つけたらすぐにスタックトレースを投稿します(Android Devを起動してちょっと遊ぶ必要があります))) –

+0

最初の質問を編集して、コードスニペットのようにスタックトレースを追加してください。 –

答えて

0

ハニーコム以降は、UIスレッドでネットワークIOを行うすべてのプロセスを強制終了しています。これは、あなたがfetch()をしていないときに問題が表示されない理由を説明します。ジンジャーブレッドには、このようなネットワークIOを殺すか、少なくともログにフラグを立てる、いわゆる厳格モードがあります。

これが当てはまらない場合は、スタックトレースを送信してください。

あなたのスタックトレースは、私が推測何を確認:

01-02 11:59:10.128: E/AndroidRuntime(971): Caused by: android.os.NetworkOnMainThreadException 
01-02 11:59:10.128: E/AndroidRuntime(971):  at java.net.URL.getContent(URL.java:447) 
[...] 
01-02 11:59:10.128: E/AndroidRuntime(971):  at com.tjbiddle.puppywood.PuppyWood.fetch(PuppyWood.java:58) 

だから基本的にそれはあなたがバックグラウンドスレッドでのネットワークIOを行う必要があることを意味します。これを達成する1つの方法は、例えば、たとえばAsyncTaskを使用します。 this example codeonPreExecuteonPostExecuteはUIスレッドで実行され、doInBackgroundは独自のスレッドで実行されます。

+0

Android 2.3.3あたりのビルド - だから、それはそうではないと推測していますが、情報に感謝します! 私はスタックトレースatmをポストする方法を理解しようとしていますが、まもなく更新されます。 –

+0

スタックトレースを追加しました(私だと思います) –

+0

素晴らしい、ありがとう!私はそのショットを与えるよ! –