为什么图像没有加载?

时间:2014-12-05 08:24:29

标签: android android-asynctask imageview

我正在为我的项目制作演示。

XML文件如下:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="${relativePackage}.${activityClass}" >

    <ImageView 

        android:id="@+id/imageview"
        android:layout_height="match_parent"
        android:layout_width="match_parent"
        android:visibility="visible"
        android:layout_gravity="center"
        android:contentDescription="@string/content_description"
        />
</LinearLayout>

我的Activity跟随将图片加载到ImageView。 实现AsyncTask作为内部类。

    public class LoadImageActivity extends Activity {

    ImageView image ;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.load_image);
        image = (ImageView)findViewById(R.id.imageview);
        String url = "http://java.sogeti.nl/JavaBlog/wp-content/uploads/2009/04/android_icon_256.png";
        LoadImageAsync loadImageAsync = new LoadImageAsync(url, image);
        loadImageAsync.execute(url);    

    }

Activity的{​​{1}}方法中,我调用了onCreate来加载图片

AsyncTask

@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.load_image); image = (ImageView)findViewById(R.id.imageview); String url = "http://java.sogeti.nl/JavaBlog/wp-content/uploads/2009/04/android_icon_256.png"; LoadImageAsync loadImageAsync = new LoadImageAsync(url, image); loadImageAsync.execute(url); } 课程中,我有以下代码,我遵循the Stack Overflow link related to this

我在AsyncTask类下面实现了Activity类的内部类。

AsyncTask

我做错了什么?还是错过了什么?

处理图像时需要考虑什么?

此后将转移到使用public class LoadImageAsync extends AsyncTask<String, Void, Bitmap>{ private String url; private ImageView imageView; public LoadImageAsync(String url, ImageView imageView) { this.url = url; this.imageView = imageView; } @Override protected Bitmap doInBackground(String... params) { try { URL urlConnection = (URL) new URL(params[0]); HttpURLConnection connection = (HttpURLConnection) urlConnection .openConnection(); connection.setDoInput(true); connection.connect(); InputStream input = connection.getInputStream(); Bitmap myBitmap = BitmapFactory.decodeStream(input); return myBitmap; } catch (Exception e) { e.printStackTrace(); } return null; } @Override protected void onPostExecute(Bitmap result) { imageView.setImageBitmap(result); super.onPostExecute(result); } } 加载图片。

3 个答案:

答案 0 :(得分:1)

我建议使用毕加索 Picasso.with(上下文).load(&#34; http://java.sogeti.nl/JavaBlog/wp-content/uploads/2009/04/android_icon_256.png&#34)。到(图像);

所以你不必担心当你在GridView中实现它时很可能发生的OutMemoryException

答案 1 :(得分:0)

问题可能出在ImageView焦点上。尝试致电requestLayout和/或invalidate

@Override
protected void onPostExecute(Bitmap result) {
    imageView.requestLayout();
    imageView.setImageBitmap(result);
    imageView.invalidate(); //try this if it still not working
    super.onPostExecute(result);
}

答案 2 :(得分:0)

使用AQuery从网址加载图片:

AQuery aq = new AQuery(context);

aq.ajax(url, Bitmap.class, new AjaxCallback<Bitmap>() {
      @Override
      public void callback(String url, Bitmap object, AjaxStatus status) {
         imageView.setImageBitmap(object);
      }
});

aq.id(imageView).image(url,true,true);

注意:请检查更多选项,以改善图像加载,缓存等。