Recyclerview仅显示我的数据库的最后一行

时间:2017-04-27 13:18:22

标签: android sqlite android-recyclerview

我不知道为什么我的recyclerview只显示我数据库的最后一行,尽管我用5个数据对它进行了初始化。我在互联网上搜索了很多甚至更多,但没有一个解决方案正在工作。你能帮我弄清楚为什么我的recyclerView只显示数据库的最后一行???在此先感谢你们所有人。

RecyclerView.adapter类:

public class RecyclerAdapter extends RecyclerView.Adapter<RecyclerAdapter.ViewHolder> {
Context mContext;
ArrayList<ImageInfos> imageInfosArrayList;

public RecyclerAdapter(Context ctx,ArrayList<ImageInfos> imageInfoses){
    this.imageInfosArrayList= new ArrayList<ImageInfos>();
    this.mContext=ctx;
    this.imageInfosArrayList=imageInfoses;

}



@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
    View view= LayoutInflater.from(parent.getContext()).inflate(R.layout.cardview_layout,null);
    return new ViewHolder(view);
}

@Override
public void onBindViewHolder(ViewHolder holder, int position) {

    holder.imageView.setImageResource(R.drawable.screen1);
    holder.year.setText(holder.year.getText()+imageInfosArrayList.get(position).getYear());
    holder.keyword.setText( holder.keyword.getText()+imageInfosArrayList.get(position).getKeyword());
    holder.place.setText( holder.place.getText()+imageInfosArrayList.get(position).getPlace());
    holder.resume.setText( holder.resume.getText()+imageInfosArrayList.get(position).getResume());

   /* holder.year.setText(holder.year.getText()+ImageInfos.Year);
    holder.keyword.setText( holder.keyword.getText()+ImageInfos.Keyword);
    holder.place.setText( holder.place.getText()+ImageInfos.Place);
    holder.resume.setText( holder.resume.getText()+ImageInfos.Resume);
    */
   //holder.setIsRecyclable(false);

}

@Override
public int getItemCount() {
    return imageInfosArrayList.size();
}

public class ViewHolder extends RecyclerView.ViewHolder{
    ImageView imageView;
    TextView year;
    TextView keyword;
    TextView place;
    TextView resume;


    public ViewHolder(View view) {
        super(view);
        imageView=(ImageView) view.findViewById(R.id.imageID);
        imageView.setAdjustViewBounds(true);
        imageView.setScaleType(ImageView.ScaleType.FIT_XY);

        year=(TextView) view.findViewById(R.id.year_text_view);
        keyword=(TextView) view.findViewById(R.id.keyword_text_view);
        place=(TextView) view.findViewById(R.id.place_text_view);
        resume=(TextView) view.findViewById(R.id.resume_text_view);
    }
}

}

DBhelper.class:

public class DBHelper extends SQLiteOpenHelper {
// Database and Table version
private static final String DATABASE_NAME = "Images.db";
public static final String TABLE_NAME = "Images";

//Columns
public static final String COLUMN_ID = "ID";
public static final String COLUMN_IMAGE = "Image";
public static final String COLUMN_YEAR = "Year";
public static final String COLUMN_KEYWORD = "Keyword";
public static final String COLUMN_PLACE = "Place";
public static final String COLUMN_RESUME="Resume";
//Database version
private static final int DATABASE_VERSION = 1;

// Database creation sql statement
// + COLUMN_IMAGE+ " BLOB NOT NULL,"
private static final String DATABASE_CREATE = "CREATE TABLE "
        + TABLE_NAME + "( "
        + COLUMN_ID + " INTEGER PRIMARY KEY AUTOINCREMENT, "
        + COLUMN_IMAGE+" BLOB,"
        + COLUMN_YEAR+ " TEXT,"
        +COLUMN_KEYWORD+ " TEXT,"
        +COLUMN_PLACE+ " TEXT,"
        + COLUMN_RESUME+ " TEXT);";
Context mContext;


public DBHelper(Context context) {

    super(context, DATABASE_NAME, null, DATABASE_VERSION);
    this.mContext=context;
}


@Override
public void onCreate(SQLiteDatabase db) {
    db.execSQL(DATABASE_CREATE);
    Toast.makeText(mContext,"Data Base created",Toast.LENGTH_LONG).show();
}
public boolean insertImageWithInfos(ImageInfos imageInfos) throws SQLException{


    SQLiteDatabase sqLiteDatabase= this.getWritableDatabase();
    ContentValues contentValues= new ContentValues();
   // contentValues.put(COLUMN_ID,imageInfos.getId());
    contentValues.put(COLUMN_IMAGE, imageInfos.getImage());
    contentValues.put(COLUMN_KEYWORD,imageInfos.getKeyword());
    contentValues.put(COLUMN_YEAR,imageInfos.getYear());
    contentValues.put(COLUMN_PLACE,imageInfos.getPlace());
    contentValues.put(COLUMN_RESUME,imageInfos.getResume());
   long i= sqLiteDatabase.insert(TABLE_NAME, null,contentValues);
    if (i==-1)
    {
        Toast.makeText(mContext,"Elements are not inserted",Toast.LENGTH_LONG).show();
        return false;
    }
    else
    {
        sqLiteDatabase.close();
        Toast.makeText(mContext,"Elements are inserted",Toast.LENGTH_LONG).show();
        return true;

    }



}

@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
    db.execSQL("DROP TABLE IF EXISTS " + TABLE_NAME);
    onCreate(db);
}

public ArrayList<String> getAllImages() {
    ArrayList<String> array_list = new ArrayList<String>();

    //hp = new HashMap();
    SQLiteDatabase db = this.getReadableDatabase();
    Cursor res =  db.rawQuery( "select * from "+TABLE_NAME, null );
    res.moveToFirst();

    while(res.isAfterLast() == false){
        array_list.add(res.getString(res.getColumnIndex(COLUMN_ID)));
        res.moveToNext();
    }
    return array_list;
}
/*public void showDbElements(){
    SQLiteDatabase db=this.getReadableDatabase();
    Cursor cursor= db.rawQuery("select * from "+TABLE_NAME,null);
    if (!cursor.isAfterLast()){

    }
}
*/

public ArrayList<ImageInfos> getValuesFromDataBase() {
    ArrayList<ImageInfos> imageInfosArrayList = new ArrayList<ImageInfos>();
    SQLiteDatabase db = getReadableDatabase();
    Cursor cursor = db.rawQuery("select * from " + TABLE_NAME, null);

    if (cursor != null && cursor.moveToFirst())

    {
        Log.e("moveToCursor: ", "Cursor.moveToFirst is true");

           while(cursor.isAfterLast()==false)
                {
                    ImageInfos imageInfos=new ImageInfos(mContext);
                    imageInfos.setImage();
                    imageInfos.setYear(cursor.getString(cursor.getColumnIndex(COLUMN_YEAR)));
                    imageInfos.setKeyword(cursor.getString(cursor.getColumnIndex(COLUMN_KEYWORD)));
                    imageInfos.setPlace(cursor.getString(cursor.getColumnIndex(COLUMN_PLACE)));
                    imageInfos.setResume(cursor.getString(cursor.getColumnIndex(COLUMN_RESUME)));
                    imageInfosArrayList.add(imageInfos);
                    cursor.moveToNext();


            }
        }
        cursor.close();
        db.close();
        Log.e("database elements: ", String.valueOf(imageInfosArrayList.size()));

    return imageInfosArrayList;

    }
public Bitmap getImage(){
    SQLiteDatabase db=getReadableDatabase();


    Cursor cursor=db.rawQuery("select "+COLUMN_IMAGE+" from "+TABLE_NAME, new String[]{});
    if (cursor==null)
    {
        Toast.makeText(mContext,"Cursor is empty",Toast.LENGTH_LONG).show();
    }
    cursor.moveToFirst();
    byte[] blob=cursor.getBlob(cursor.getColumnIndex(COLUMN_IMAGE));
        ByteArrayInputStream inputStream = new ByteArrayInputStream(blob);
        Bitmap bitmap = BitmapFactory.decodeStream(inputStream);
        return bitmap;
}

}

Model Class&#34; ImageInfos&#34;:

public class ImageInfos {
public static  long ID;
public static String Year;
public static String Keyword;
public static String Place;
public static String Resume;
public static byte[] imageDB;
Context mContext;


public Integer[] mImages= {
        R.drawable.screen1,R.drawable.screen2,R.drawable.screen3,
        R.drawable.screen4,R.drawable.screen5,R.drawable.screen6,
        R.drawable.screen7,R.drawable.screen8,R.drawable.screen9,
        R.drawable.screen10,R.drawable.screen11,R.drawable.screen12,
        R.drawable.screen13,R.drawable.screen14,R.drawable.screen15,
        R.drawable.screen16,R.drawable.screen17,R.drawable.screen18,
        R.drawable.screen19,R.drawable.screen20,R.drawable.screen21,
};

public ImageInfos(Context ctx){
    this.mContext=ctx;

}
public ImageInfos(String Year, String keyword,String Place, String Resume){
    this.Year=Year;
    this.Keyword=keyword;
    this.Place=Place;
    this.Resume=Resume;
}

public long setId(long id){
    return this.ID=id;
}
public long getId(){
   return this.ID;
}

public void setYear(String Year){
    this.Year=Year;
}

public String getYear(){
    return Year;
}
public void setKeyword(String Keyword){
    this.Keyword=Keyword;
}
public String getKeyword(){
    return Keyword;
}
public void setPlace(String Place){
    this.Place=Place;
}
public String getPlace(){
    return Place;
}
public void setResume(String Resume){
    this.Resume=Resume;
}
public String getResume( ){
    return Resume;
}


public void setImage(){


    Drawable drawable= ContextCompat.getDrawable(mContext,R.drawable.screen2);
    Bitmap bitmap = ((BitmapDrawable)drawable).getBitmap();
    ByteArrayOutputStream stream = new ByteArrayOutputStream();
    bitmap.compress(Bitmap.CompressFormat.JPEG, 0, stream);

    //byte[] bitMapData = stream.toByteArray();
    imageDB=stream.toByteArray();

}




public byte[] getImage(){
    return imageDB;

}

}

将显示数据的活动w&#34; ShowData活动:

ublic class ShowData extends AppCompatActivity {
DBHelper dbHelper;

ArrayList<ImageInfos> imageInfosArrayList;
RecyclerView recyclerView;
RecyclerAdapter recyclerAdapter;
LinearLayoutManager mLayoutManager;


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

    recyclerView=(RecyclerView) findViewById(R.id.recyclerviewImage);
    dbHelper=new DBHelper(this);
    imageInfosArrayList= new ArrayList<ImageInfos>();
    imageInfosArrayList=dbHelper.getValuesFromDataBase();

    recyclerAdapter= new RecyclerAdapter(this,imageInfosArrayList);
    mLayoutManager = new LinearLayoutManager(this,LinearLayoutManager.HORIZONTAL,false);
    recyclerView.setLayoutManager(mLayoutManager);
    recyclerView.setHasFixedSize(true);
    recyclerView.scrollToPosition(0);
    recyclerView.setAdapter(recyclerAdapter);

      }

}

2 个答案:

答案 0 :(得分:1)

static类中的字段是静态的,因此与该类的所有实例共享。要使字段特定于实例,请删除class MyDate extends Date{ @Override public String toString(){ return sdf.format(this) } } 关键字。

答案 1 :(得分:0)

当您为recyclerview创建cardview_layout.xml时,应遵循以下内容:

始终使用&#34; wrap_content&#34;对于行的高度,否则在&#34; match_parent&#34;它将占据整个屏幕的一行。