簡體   English   中英

Android Volley Singleton和自定義gridview適配器

[英]Android volley singleton and custom gridview adapter

我正在使用自定義gridview適配器來顯示帶有凌空單例的圖像。 但是當我運行它時,它返回onErrorResponse 看來適配器甚至沒有正確設置,這與我在哪里設置適配器有關? 我嘗試過在onCreate設置它,但存在相同的錯誤。

適配器類看起來不錯,所以我認為問題出在MainActivity

MainActivity.java:

public class MainActivity extends AppCompatActivity {

private final int THUMBNAIL_SIZE = 250;
private final String KEY = "IMAGE";
ArrayList<Bitmap> bitmaps = new ArrayList<Bitmap>();
private static final String URLS[] = {
    "http://10.0.2.2/Android%20A4_1/germany.png",
    "http://10.0.2.2/Android%20A4_1/indonesia.png",
    "http://10.0.2.2/Android%20A4_1/japan.png",
    "http://10.0.2.2/Android%20A4_1/sarawak.png",
    "http://10.0.2.2/Android%20A4_1/singapore.png",
    "http://10.0.2.2/Android%20A4_1/switzerland.png",
};


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



    for(int i = 0; i<URLS.length; i++) {
        LoadingImages(URLS[i]);
    }
}

private void LoadingImages(String url) {
    ImageLoader imageLoader = MySingleton.getInstance(getApplicationContext()).getImageLoader();
    imageLoader.get(url, new ImageLoader.ImageListener() {
        @Override
        public void onResponse(ImageLoader.ImageContainer response, boolean isImmediate) {
            Bitmap image = response.getBitmap();
            Bitmap thumbnail = ThumbnailUtils.extractThumbnail(image, THUMBNAIL_SIZE, THUMBNAIL_SIZE);
            bitmaps.add(thumbnail);

            GridView gridView = (GridView)findViewById(R.id.grid_layout);

            final ImageAdapter imageAdapter = new ImageAdapter(MainActivity.this, bitmaps);
            gridView.setAdapter(imageAdapter);

            gridView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
                @Override
                public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
                    Intent intent = new Intent(getApplicationContext(), Main2Activity.class);
                    intent.putExtra(KEY, URLS[i]);
                    startActivity(intent);
                }
            });
        }

        @Override
        public void onErrorResponse(VolleyError error) {
            Log.e("error", error.getMessage());
        }
    });
}
}

適配器類:

public class ImageAdapter extends BaseAdapter {
private Context mContext;
private ArrayList<Bitmap> bitmaps;

public ImageAdapter(Context context, ArrayList<Bitmap> bitmaps) {
    this.mContext = context;
    this.bitmaps = bitmaps;
}

@Override
public int getCount() {
    return 0;
}

@Override
public Object getItem(int i) {
    return null;
}

@Override
public long getItemId(int i) {
    return 0;
}

@Override
public View getView(int i, View view, ViewGroup viewGroup) {


    if (view == null) {
      final LayoutInflater layoutInflater = LayoutInflater.from(mContext);
      view = layoutInflater.inflate(R.layout.griditems, null);
      MyViewHolder myViewHolder = new MyViewHolder(view);
      view.setTag(myViewHolder);
    }
    MyViewHolder myViewHolder = (MyViewHolder)view.getTag();
    myViewHolder.img.setImageBitmap(bitmaps.get(i));

    return view;
}

public class MyViewHolder {
   public ImageView img;

   public MyViewHolder(View view) {
       img = view.findViewById(R.id.image1);
   }
}
}

我的單身人士:

public class MySingleton {
private static MySingleton instance;
private RequestQueue requestQueue;
private ImageLoader imageLoader;
private static Context context;

private MySingleton(Context context){
    this.context = context;
    requestQueue = Volley.newRequestQueue(context);
    imageLoader = new ImageLoader(requestQueue, new ImageLoader.ImageCache() {
        private final LruCache<String, Bitmap> cache = new LruCache<>(6);
        @Override
        public Bitmap getBitmap(String url) {
            Bitmap bmp = cache.get(url);
            if (bmp == null) {
                System.out.println("Not in cache");
            } else {
                System.out.println("In cache");
            }

            return bmp;
        }

        @Override
        public void putBitmap(String url, Bitmap bitmap) {
            System.out.println("Put in cache");
            cache.put(url, bitmap);
        }
    });
}

public static synchronized MySingleton getInstance(Context context) {
    if (instance == null) {
        instance = new MySingleton(context);
    }
    return instance;
}

public ImageLoader getImageLoader() {
    return imageLoader;
}
}

Main2Activity:

public class Main2Activity extends AppCompatActivity {

private ImageView imageView;
private final String KEY = "IMAGE";

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

    imageView = (ImageView)findViewById(R.id.imageView);
    Bundle bundle = getIntent().getExtras();
    String url = bundle.getString(KEY);
    LoadingImages(url);
}

private void LoadingImages(String url) {
    final ImageLoader imageLoader = MySingleton.getInstance(getApplicationContext()).getImageLoader();
    imageLoader.get(url, new ImageLoader.ImageListener() {
        @Override
        public void onResponse(ImageLoader.ImageContainer response, boolean isImmediate) {
            Bitmap bitmap = response.getBitmap();
            imageView.setImageBitmap(bitmap);
        }

        @Override
        public void onErrorResponse(VolleyError error) {
            Log.e("Error", error.getMessage());
        }
    });
}

}

改變這種方法

@Override
public int getCount() {
return 0;
}

@Override
public Object getItem(int i) {
return null;
}

@Override
public long getItemId(int i) {
return 0;
 }

@Override
public int getCount() {
return bitmaps.size;
}

@Override
public Object getItem(int i) {
return bitmaps.get(i);
}

@Override
public long getItemId(int i) {
return i;
 }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM