将Web图像加载到Android时出现黑屏

时间:2012-02-02 07:26:27

标签: android imageview android-canvas

从网络上加载图片时,我会看到黑屏。

我从网页中取出页面,将其转换为画布,然后将其设置为ImageView。

现在当我加载它时,我在图像中出现黑屏。

活动代码:

public class ImageActivity extends Activity {

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        ImageView i = (ImageView) findViewById(R.id.imageView1);

        try {
            String url = "http://www.rotoworld.com/images/headshots/NBA/1372.jpg";
            Drawable image = ImageOperations(this, url);
            i.setImageDrawable(image);
        } catch (Exception ex) {
            ex.printStackTrace();
        }
        i.setMinimumWidth(22);
        i.setMinimumHeight(22);

        i.setMaxWidth(22);
        i.setMaxHeight(22);

    }

    private Drawable ImageOperations(Context ctx, String url) {
        try {
            InputStream is = (InputStream) this.fetch(url);
            Drawable d = Drawable.createFromStream(is, "src");
            return d;
        } catch (MalformedURLException e) {
            return null;
        } catch (IOException e) {
            return null;
        }
    }

    public Object fetch(String address) throws MalformedURLException, IOException {

        URL url = new URL(address);
        Object content = url.getContent();
        return content;
    }

}

XML:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >

<TextView
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:text="@string/hello" />

<ImageView
    android:id="@+id/imageView1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:src="@drawable/ic_launcher" />

4 个答案:

答案 0 :(得分:0)

试试这个......

try 
            {
                URL feedImage = new URL(imageUrl);
                HttpURLConnection conn= (HttpURLConnection)feedImage.openConnection();
                InputStream is = conn.getInputStream();
                Bitmap img = BitmapFactory.decodeStream(is);
                i.setImageBitmap(img);



            } 
            catch (MalformedURLException e) 
            {
                e.printStackTrace();
            } 
            catch (IOException e) 
            {
                e.printStackTrace();
            }

答案 1 :(得分:0)

在Android中打开活动时获得黑屏的常见原因是创建活动需要很长时间。

我认为你应该把你的图像提取到AsyncTask或类似的。

答案 2 :(得分:0)

试试这个..这对你有帮助

 public void onCreate(Bundle savedInstanceState) 
        {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.main);
ImageView imageView= (ImageView)findViewById(R.id.imageView1);
            new loadImageTask().execute("http://www.rotoworld.com/images/headshots/NBA/1372.jpg");
        }  

      public static Drawable LoadImageFromWeb(String url)
            {
                try 
                {
                    InputStream is = (InputStream) new URL(url).getContent();
                    Drawable d = Drawable.createFromStream(is, "");
                    return d;

                } 
                catch (Exception e) 
                {
                    return null;
                }


            }

            public class loadImageTask extends AsyncTask<String, Void, Void>
            {

                Drawable imgLoad;

                @Override
                protected void onPreExecute() 
                {
                    super.onPreExecute();
                }

                @Override
                protected Void doInBackground(String... params) 
                {
                    imgLoad = LoadImageFromWeb(params[0]);

                    return null;
                }

                @Override
                protected void onPostExecute(Void result) 
                {
                    super.onPostExecute(result);
                                imageView.setVisibility(View.VISIBLE);

                }

            }

答案 3 :(得分:0)

这是最后的结果......

需要使用Asynctask我还将html发送到网页以便从网上检索实际的jpg

String namesTr1 = pb;
    System.out.println(">>>>NAMEBEFORE"+pb);
    String nameminus1 = namesTr1.replace(' ','-' );
    System.out.println(">>>>NAMEAFTERREPLACe"+nameminus1);
    PGCalc pgcalc = new PGCalc();
    String playerhtml="http://www.rotoworld.com/player/nba/1860/"+nameminus1+"/1";
    System.out.println(">>>>Before JSOUP"+playerhtml);

    //Getting html image from Jspoup
    try {
        imagehtml = pgcalc.getimage(playerhtml);
        System.out.println(">>>>>>jsoupimagehtml"+imagehtml);
    } catch (IOException e1) {
        // TODO Auto-generated catch block
        e1.printStackTrace();
    }
    //Setting image in Imageview
    try 
    {
        URL feedImage = new URL(imagehtml);
        HttpURLConnection conn= (HttpURLConnection)feedImage.openConnection();
        InputStream is = conn.getInputStream();
        Bitmap img;
        return img = BitmapFactory.decodeStream(is);
        //imageview1.setImageBitmap(img);

    } 
    catch (MalformedURLException e) 
    {
        e.printStackTrace();
    } 
    catch (IOException e) 
    {
        e.printStackTrace();
    }
    return null;
}