我不明白爲什麼我的recyclerview只顯示我的數據庫的最後一行,儘管我用5個數據初始化了它。我在互聯網上搜索了很多,甚至更高級,但沒有任何解決方案正在工作。你能幫我弄清楚爲什麼我的recyclerView只顯示數據庫的最後一行嗎?在此先感謝大家。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;
}
}
其中數據會顯示「ShowData活動activityw:當您創建recyclerview cardview_layout.xml應該遵循這些東西
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);
}
}
調試您的代碼並檢查您用作RecyclerAdapter構造函數參數的列表是否包含多個項目。如果有,請檢查imageInfosArrayList元素。如果它不工作,請嘗試關閉imageInfosArrayList = imageInfoses for imageInfosArrayList.addAll(imageInfoses); –
檢查您傳遞給適配器的'imageInfosArrayList'中包含的項目數。 – Shark
我已經完成了。它顯示我的ArrayList包含5個元素,但只顯示最後一行(第5個元素)。 – Bayram