2013-04-23 3 views
0

Мне очень нужна ваша помощь, чтобы решить проблему, которая может показаться глупой для многих из вас.Заполните GrindView изображениями, взятыми из базы данных

Мне нужно создать простой Grindview и заполнить его изображениями. Я попробовал образец кода, предоставленный сайтом разработчиков Android, и он работает хорошо.

Проблема заключается в том, что образец кода предоставляет изображения с возможностью рисования. Мне нужно заполнить его растровыми изображениями, которые хранятся в моем sqlite Db как BLOB.

db протестирован и работает, и я могу получить растровое изображение из BLOB без проблем.

В моем коде, когда начинается действие, ничего не происходит, и я получаю белый экран без изображений. Я потратил много часов на это, я надеюсь, что вы можете дать мне несколько советов! Заранее благодарю за ответы !!! : D

Это мой класс код:

package cover.me; 

import java.io.ByteArrayInputStream; 
import java.util.ArrayList; 

import cover.me.Game.SimulationView.Cursor; 
import android.app.Activity; 
import android.content.Context; 
import android.graphics.Bitmap; 
import android.graphics.BitmapFactory; 
import android.os.Bundle; 
import android.view.Display; 
import android.view.Gravity; 
import android.view.View; 
import android.view.ViewGroup; 
import android.view.ViewGroup.LayoutParams; 
import android.widget.BaseAdapter; 
import android.widget.GridView; 
import android.widget.ImageView; 
import android.widget.LinearLayout; 

public class Gallery extends Activity{ 

    private LinearLayout myGallery; 
    private android.database.Cursor cursor; 
    private DbAdapter MyDb; 
    private int x,y; 
    private Display display; 


    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.gallery); 

     GridView gridview = (GridView) findViewById(R.id.gridview); 
     gridview.setAdapter(new ImageAdapter(this)); 


    } 

    public class ImageAdapter extends BaseAdapter{ 
     private Context mContext; 
     private DbAdapter MyDb; 
     private int Counter; 
     private ArrayList<Bitmap> Images = new ArrayList<Bitmap>(); 
     private boolean ImagesLoaded = false; 



     public ImageAdapter(Context c){ 
      mContext = c; 
     } 

     public int getCount() { 
      return 0; 
     } 

     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){ 

      if(ImagesLoaded == false){ //Add bitmap to Images ArrayList the first time that getView is called 
       MyDb = new DbAdapter(Gallery.this); 
       MyDb.open(); 
       cursor = MyDb.fetchAllLevels(); 
       cursor.moveToFirst(); 

       for(int i=0;i<cursor.getCount()-1;i++){ 
        byte[] image = cursor.getBlob(cursor.getColumnIndex(DbAdapter.LvL_Bitmap)); 
        ByteArrayInputStream inputStream = new ByteArrayInputStream(image); 
        Bitmap mBitmap = BitmapFactory.decodeStream(inputStream); 
        Images.add(mBitmap); 
        cursor.moveToNext(); 
       } 

       cursor.close(); 
       MyDb.close(); 
       ImagesLoaded = true; 
      } 

      ImageView imageView; 
      if (convertView == null){ 
       imageView = new ImageView(mContext); 
       imageView.setLayoutParams(new GridView.LayoutParams(85, 85)); 
       imageView.setScaleType(ImageView.ScaleType.CENTER_CROP); 
       imageView.setPadding(8, 8, 8, 8); 
      } 

      else{ 
       imageView = (ImageView) convertView; 
       } 

      imageView.setImageBitmap(Images.get(Counter)); 
      Counter++; 



      return imageView; 
     } 






    } 


} 

А вот XML

<?xml version="1.0" encoding="utf-8"?> 
<GridView xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/gridview" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:columnWidth="90dp" 
    android:numColumns="auto_fit" 
    android:verticalSpacing="10dp" 
    android:horizontalSpacing="10dp" 
    android:stretchMode="columnWidth" 
    android:gravity="center" 
/> 

Это мой первый вопрос здесь, на StackOverflow, чтобы дать мне несколько советов, если я сделал что-то не так с мой вопрос!!! Спасибо!

+0

Почему вы не используете пользовательский элемент строки для вашего gridview? –

+0

Проблема в том, что gridview пуст и появляется, если он пуст, когда начинается действие ... Как пользовательский элемент строки может решить проблему? – Razinar

ответ

1

Это старый вопрос, но он еще не дан ответ. Я считаю, что ваша проблема в том, что вы возвращаете 0 в свой метод getCount. Я работал над предыдущим проектом, который очень похож на этот, и нашел эту ошибку в моей. getCount должен вернуть общее количество записей, которые вы хотите просмотреть.

public int getCount() { 
    return 0;  //Needs to return something other than zero 
} 
Смежные вопросы