图片不会在Android 4.0上显示

时间:2012-01-16 18:02:38

标签: android image imageview loading android-4.0-ice-cream-sandwich

我有问题。当应用程序从Web加载图像时,它应该显示,但在Android 4.0上它不会显示。它适用于Android 2.2。

这是代码。

public class Main extends Activity {

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

        ImageView imgView =(ImageView)findViewById(R.id.imview);
        Drawable drawable = LoadImageFromWeb("http://alphaapplication.com/liveshit/free/tour_dates/images/ad.png");
        imgView.setImageDrawable(drawable);
    }

    public void ad (View view) {
        ad("https://market.android.com/search?q=pub%3A%22Alpha%20Application%22");
    }

    private void ad (String url) {
        Uri uriUrl = Uri.parse(url);
        Intent launchBrowser = new Intent(Intent.ACTION_VIEW, uriUrl);
        startActivity(launchBrowser);
    }

    private Drawable LoadImageFromWeb(String 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;
        }
    }   
}

2 个答案:

答案 0 :(得分:2)

从Honeycomb,3.X.X开始,您无法再从主UI线程访问网络。这就是您刚刚提供的代码段中的内容。现在,您需要将所有网络访问移动到后台线程。完成此任务的最简单方法是使用AsyncTask。我已将您与开发人员指南相关联,以便您可以轻松转换代码。

http://developer.android.com/resources/articles/painless-threading.html

只是为了验证,你应该查看logcat,你的应用程序可能会悄悄地抛出一个NetworkOnMainThreadException,但它不足以导致你的应用程序爆炸,因为它是信息性的;不是系统停止。

让我知道这是否适合您,或者查找logcat中抛出的异常并在此处回复

DSC

答案 1 :(得分:1)

pr0methium是对的。 http://developer.aiwgame.com/imageview-show-image-from-url-on-android-4-0.html

....... //显示图像         新的DownloadImageTask((ImageView)findViewById(R.id.imageView1))                 .execute( “http://java.sogeti.nl/JavaBlog/wp-content/uploads/2009/04/android_icon_256.png”);     }

public void onClick(View v) {
    startActivity(new Intent(this, IndexActivity.class));
    finish();

}

private class DownloadImageTask extends AsyncTask<String, Void, Bitmap> {
    ImageView bmImage;

    public DownloadImageTask(ImageView bmImage) {
        this.bmImage = bmImage;
    }

    protected Bitmap doInBackground(String... urls) {
        String urldisplay = urls[0];
        Bitmap mIcon11 = null;
        try {
            InputStream in = new java.net.URL(urldisplay).openStream();
            mIcon11 = BitmapFactory.decodeStream(in);
        } catch (Exception e) {
            Log.e("Error", e.getMessage());
            e.printStackTrace();
        }
        return mIcon11;
    }

    protected void onPostExecute(Bitmap result) {
        bmImage.setImageBitmap(result);
    }
}