0

私はAndroidで画像の幅と高さを取得し、それに応じてロードします。以下のコードは2.3.3で正常に動作していますが、より高いバージョン(4.0)でテストすると、その高さと幅でnullポインター例外が発生します...以下は私のコード...

           Drawable drawable = null; 
           drawable = LoadImageFromWebOperations(logo_url.replace(" ", "%20"));
           System.out.println("Width" + drawable.getMinimumWidth());
           System.out.println("Height" + drawable.getMinimumHeight()); 
           int width = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_PX, drawable.getMinimumWidth(), mCtx.getResources().getDisplayMetrics());
           int height = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_PX, drawable.getMinimumHeight(), mCtx.getResources().getDisplayMetrics());
           client_logo.setMinimumHeight(height);
           client_logo.setMinimumWidth(width);
           client_logo.setImageDrawable(drawable); 


            public Drawable LoadImageFromWebOperations(String url){
System.out.println(url);

    try{
        InputStream is = (InputStream) new URL(url).getContent();
        Drawable d = Drawable.createFromStream(is, "src name");
        return (d);
    }catch (Exception e) {
        //System.out.println("Exc="+e);
        return null;
    }
}
4

1 に答える 1

0

API 11以降、UIスレッドでこのコードを実行している場合、ネットワークアクセスはをスローしNetworkOnMainThreadExceptionます。logcatの出力を投稿しませんが(これは非常に役立ちます)、これが起こっているのではないかと思います。その結果、LoadImageFromWebOperationsが戻りnull、ドローアブルプロパティにアクセスしようとするとNPEが取得されます。

このコードはワーカースレッドで実行する必要があります。記事「アプリの応答性を維持する」を参照してください。

于 2013-02-05T11:49:17.537 に答える