2016-07-13 274 views
0

我相信这不是一个新问题。不幸的是,在为这项活动争取了20多个小时后,我仍然找不到解决方案。你能否帮我一个忙吗?我将非常感激。使用AsyncTask从网址获取图片

嘿是我的问题。我想从不同的URL显示图像到一个girdView布局。但是,我的代码没有工作,所以屏幕没有显示任何内容。你能帮我解决这个问题吗?

下面是我的MainActivity类别

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    String [] imgUrlList = { 
      "http://image.tmdb.org/t/p/w500/cGOPbv9wA5gEejkUN892JrveARt.jpg", 
      "http://image.tmdb.org/t/p/w500/6FxOPJ9Ysilpq0IgkrMJ7PubFhq.jpg", 
      "http://image.tmdb.org/t/p/w500/z09QAf8WbZncbitewNk6lKYMZsh.jpg", 
      "http://image.tmdb.org/t/p/w500/kqjL17yufvn9OVLyXYpvtyrFfak.jpg" 
    }; 


    mMovieAdapter = new MyAdapter(this, imgUrlList); 
    GridView gridview = (GridView) findViewById(R.id.gridView); 
    gridview.setAdapter(mMovieAdapter); 

} 

public class MyAdapter extends ArrayAdapter<String>{ 
    private final Activity context; 
    private final String[] imgUrlList; 

    public MyAdapter (Activity context, String[] imgUrlList){ 
     super(context, R.layout.image_item); 
     this.context = context; 
     this.imgUrlList = imgUrlList; 
    } 

    public View getView (int position, View view, ViewGroup parent){ 
     LayoutInflater inflater = context.getLayoutInflater(); 
     View rootView = inflater.inflate(R.layout.image_item, null, true); 

     new DownloadImageTask((ImageView) rootView.findViewById(R.id.imageItem)).execute(imgUrlList[position]); 
     ImageView imageView = (ImageView) rootView.findViewById(R.id.imageItem); 
     imageView.setImageURI(Uri.parse(imgUrlList[position])); 

     return rootView; 
    } 
} 

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

    ImageView poster; 

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

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

    @Override 
    protected void onPostExecute(Bitmap result) { 
     poster.setImageBitmap(result); 
    } 
} 

下面是我的XML(activity_main)文件

<GridView 
    android:id="@+id/gridView" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:columnWidth="185dp" 
    android:numColumns="auto_fit"/> 

我也有一个ImageView的文件调用image_item

+1

你应该海外商品会有用的库像滑翔/毕加索/ UIL,它会在加载图像 –

+1

不要重新发明做一个更好的工作轮。使用Picasso或类似库的 –

+0

使用[Picasso](http://square.github.io/picasso/) – SripadRaj

回答

0

老实说,我不知道为什么。但是,使用此构造解决此问题:

super(context,0,imgUrlList); 

,而不是

super(context, R.layout.image_item); 
+0

坦率地说,我不太喜欢你的代码风格。到处都是小错误。 –

+0

感谢您的回复。我刚开始学习10天前的编码。我知道有很多东西都可以改进。但是,我试图使用您提供的代码。但仍然无法在我的手机上工作。 –

+0

你能告诉我如何找到这些小错误吗? –