0

URLから画像を取得して、画像ビューに表示したかっただけです

コード:

public class MainActivity extends Activity {

    // declare internal using controls
    private TextView txtUrl;
    private ImageView imgView;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        imgView =(ImageView)findViewById(R.id.imageView1);

        Drawable drawable=null;


            drawable = grabImageFromUrl("http://blog.sptechnolab.com/wp-content/uploads/2011/02/c2.jpg");
            imgView.setImageDrawable(drawable);

    }



    private Drawable grabImageFromUrl(String url)  {
        try {
            return Drawable.createFromStream((InputStream)new URL(url).getContent(), "src");
        } catch (MalformedURLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        return null;
    }

}

このエラーが発生しています:

09-04 20:34:18.712: E/AndroidRuntime(1156): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.test/com.example.test.MainActivity}: android.os.NetworkOnMainThreadException

私はあなたの助けをいただければ幸いですあなたの答えを具体的にしてください

4

3 に答える 3

3

アプリはインターネット権限で構成されていますか?つまり、アプリのマニフェストに次のようなものがありますか?

    <uses-permission android:name="android.permission.INTERNET" />

フォローアップ:また、エラーは、アプリのUIスレッドでネットワークアクセスを行うべきではないことを示しているようです。通常、アプリのUIスレッドでI\Oを長時間ブロックすることはお勧めできません。AnycTaskを使用してみてください。そうしないと、 LazyListのコードの一部を見ることができます。

例:これを内部クラスとしてアクティビティに追加します。

private class DownloadTask extends AsyncTask<Void, Void, Drawable>{

    private final String mUrl;
    public DownloadTask(String url){
        mUrl = url;
    }

    @Override
    protected Drawable doInBackground(Void... params) {
        try {
            return Drawable.createFromStream((InputStream)new URL(mUrl).getContent(), "src");
        } catch (MalformedURLException e) {
            e.printStackTrace();
            return null;
        } catch (IOException e) {
            e.printStackTrace();
            return null;
        }
    }

    @Override
    protected void onPostExecute(Drawable result){
        ((ImageView)findViewById(R.id.imageView1)).setImageDrawable(result);
    }

}

次に、onCreateから次のように呼び出します。

new DownloadTask(url).execute();
于 2012-09-04T20:47:59.790 に答える
0

スタック内のこの質問も見てください:

URLから画像を表示-サイズと画面の向きの問題

役に立つかもしれません。

于 2012-09-04T20:46:29.080 に答える
0

簡単な方法は、単に使用することsetImageURIです:

imgView = (ImageView)findViewById(R.id.imageView1);
imgView.setImageURI(Uri.parse("http://blog.sptechnolab.com/wp-content/uploads/2011/02/c2.jpg"));

ただし、ドキュメントに記載されているように:

これにより、UIスレッドでビットマップの読み取りとデコードが行われるため、遅延が発生する可能性があります。

AsyncTaskそれが懸念される場合は、別の回答で提案されているようにデコードすることをお勧めします。

于 2012-09-04T21:12:27.950 に答える