Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/179.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java GridView行为不正确_Java_Android_Gridview - Fatal编程技术网

Java GridView行为不正确

Java GridView行为不正确,java,android,gridview,Java,Android,Gridview,我有以下问题: 我有一个gridview,它由ImageAdapter提供动力,ImageAdapter从internet下载图像并提供给gridview。这是伟大的工作,但有一个问题,是吓坏了我。问题是应该填充屏幕的前10个图像加载正确。尽管第11条显示为空白,但出于某种未知的原因,似乎是直接从convertView中获取的。图像12显示正确,下面的所有图像均为空白,即使它们具有可从中下载的有效URL 这是我的图像适配器 package com.wm.grid; import java.io

我有以下问题:

我有一个gridview,它由ImageAdapter提供动力,ImageAdapter从internet下载图像并提供给gridview。这是伟大的工作,但有一个问题,是吓坏了我。问题是应该填充屏幕的前10个图像加载正确。尽管第11条显示为空白,但出于某种未知的原因,似乎是直接从convertView中获取的。图像12显示正确,下面的所有图像均为空白,即使它们具有可从中下载的有效URL

这是我的图像适配器

package com.wm.grid;

import java.io.IOException;
import java.io.InputStream;
import java.net.MalformedURLException;
import java.net.URL;

import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.util.Log;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.GridView;
import android.widget.ImageView;

public class ImageAdapter extends BaseAdapter {
   private Context mContext;
   public String[] mThumbIds;
   public Bitmap[] bmp;
   public Bitmap bitmapPlaceholder;
    public ImageAdapter(Context c,String[] m) {
        mContext = c;
        mThumbIds = m;
        initBitmapListWithPlaceholders();
    }
    public void initBitmapListWithPlaceholders(){
        int count = mThumbIds.length;
        bmp = new Bitmap[count];
        for(int i=0;i<count;i++){
             bmp[i]=bitmapPlaceholder;
        }
    }
    public int getCount() {     
        return mThumbIds.length;
    }

    public Object getItem(int position) {
        return null;
    }

    public long getItemId(int position) {
        return 0;
    }

    // create a new ImageView for each item referenced by the Adapter
    public View getView(int position, View convertView, ViewGroup parent) {
        Log.v("POSITION","P"+position+convertView);
        ImageView imageView;
        if (convertView == null) {  // if it's not recycled, initialize some attributes
            imageView = new ImageView(mContext);
            imageView.setLayoutParams(new GridView.LayoutParams(210, 150));
            imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);
            imageView.setPadding(1, 1, 1, 1);
            Bitmap bm = getBitmap(setURL(mThumbIds[position]),position);
            bmp[position] = bm;
            imageView.setImageBitmap(bm);


        } else {
            imageView = (ImageView) convertView;
            imageView.setImageBitmap(bmp[position]);
        }
        //imageView.setImageBitmap(getBitmap(setURL(mThumbIds[position])));
        //imageView.setImageResource(mThumbIds[position]);
        return imageView;
    }
    private URL setURL (String urls){
       try{
           URL urli = new URL(urls);
           return urli;
       }
       catch (MalformedURLException e) {
           e.printStackTrace();
       }
    return null;
    }
    private Bitmap getBitmap (URL url,int position){

       try{
           Log.v("POSITION","Loading "+position+url);
           Bitmap bm = BitmapFactory.decodeStream((InputStream) url.getContent());
           return bm;
       }
  catch (IOException e) {
        e.printStackTrace();
       }
    return null;
    }
 /*   public Integer[] AddItems(Integer[] a){
        final Integer[] aThumbIds;
        final int i;
        aThumbIds = a;
        Integer[] a2 = new Integer[mThumbIds.length + aThumbIds.length];
        System.arraycopy(mThumbIds, 0, a2, 0, mThumbIds.length);
        System.arraycopy(aThumbIds, 0, a2, mThumbIds.length, aThumbIds.length);
        mThumbIds = a2;
        return mThumbIds;
    }
    */
}
上面的结果是,图像10、12和13以及下面的所有图像均为空白

欢迎提供任何线索。事先非常感谢

编辑:还有一件事。如果我这样修改代码:

if (convertView == null) {  // if it's not recycled, initialize some attributes
            imageView = new ImageView(mContext);
            imageView.setLayoutParams(new GridView.LayoutParams(210, 150));
            imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);
            imageView.setPadding(1, 1, 1, 1);
            Bitmap bm = getBitmap(setURL(mThumbIds[position]),position);
            bmp[position] = bm;
            imageView.setImageBitmap(bm);


        } else {
            imageView = (ImageView) convertView;
            imageView.setImageBitmap(getBitmap(setURL(mThumbIds[position]),position));//DOWNLOAD IMAGE AGAIN
        }

图像显示正确,但是应用程序运行速度慢了两倍,因为它总是下载图像

尝试在项目中实现缓存

if (convertView == null) {  // if it's not recycled, initialize some attributes
            imageView = new ImageView(mContext);
            imageView.setLayoutParams(new GridView.LayoutParams(210, 150));
            imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);
            imageView.setPadding(1, 1, 1, 1);
            Bitmap bm = getBitmap(setURL(mThumbIds[position]),position);
            bmp[position] = bm;
            imageView.setImageBitmap(bm);


        } else {
            imageView = (ImageView) convertView;
            imageView.setImageBitmap(getBitmap(setURL(mThumbIds[position]),position));//DOWNLOAD IMAGE AGAIN
        }