我不知道为什么我的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; }}
模型类“ImageInfos”:
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; }}
activityw将显示数据“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); }}
I don't unerstand why my recyclerview is only showing the last row of my database although i inisialized it with 5 datas. I searched a lot in internet even hier, but no one of the solution is working. Can you help me to figure out why my recyclerView is only showing the last row of the database??? Thanks in advance to all of you.
RecyclerView.adapter Class:
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; }}
the Model Class "ImageInfos":
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; }}
the activityw where data would be shown "ShowData activity:
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); }}
最满意答案
ImageInfos类中的字段是静态的,因此与该类的所有实例共享。 要使字段特定于实例,请删除static关键字。
Fields in your ImageInfos class are static and thus shared with all instances of the class. To make the fields instance-specific, drop the static keyword.
Recyclerview仅显示我的数据库的最后一行(Recyclerview is only showing the the last row of my Database)我不知道为什么我的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; }}
模型类“ImageInfos”:
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; }}
activityw将显示数据“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); }}
I don't unerstand why my recyclerview is only showing the last row of my database although i inisialized it with 5 datas. I searched a lot in internet even hier, but no one of the solution is working. Can you help me to figure out why my recyclerView is only showing the last row of the database??? Thanks in advance to all of you.
RecyclerView.adapter Class:
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; }}
the Model Class "ImageInfos":
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; }}
the activityw where data would be shown "ShowData activity:
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); }}
最满意答案
ImageInfos类中的字段是静态的,因此与该类的所有实例共享。 要使字段特定于实例,请删除static关键字。
Fields in your ImageInfos class are static and thus shared with all instances of the class. To make the fields instance-specific, drop the static keyword.
发布评论