2017-04-27 8 views
0

Ich verstehe nicht, warum meine Recyclerview nur die letzte Zeile meiner Datenbank zeigt, obwohl ich sie mit 5 Daten inisialisierte. Ich habe viel im Internet sogar hier gesucht, aber niemand der Lösung funktioniert. Kannst du mir helfen herauszufinden, warum mein RecyclerView nur die letzte Zeile der Datenbank anzeigt ??? Vielen Dank im Voraus an euch alle.Recyclerview zeigt nur die letzte Zeile meiner Datenbank

RecyclerView.adapter Klasse:

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; 
} 

}

die Model-Klasse "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; 

} 

}

die activityw wo Daten „Showdata Aktivität gezeigt werden würde:

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

     } 

}

+1

Debuggen Sie Ihren Code und überprüfen Sie, ob die Liste, die Sie als RecyclerAdapter-Konstruktorparameter verwenden, mehr als 1 Element enthält. Wenn dies der Fall ist, überprüfen Sie die imageInfosArrayList-Elemente. Wenn es nicht funktioniert, versuchen Sie, imageInfosArrayList = imageInfoses für imageInfosArrayList.addAll (imageInfoses); –

+0

Überprüfen Sie, wie viele Elemente in 'imageInfosArrayList' enthalten sind, die Sie an den Adapter übergeben. – Shark

+0

Ich habe es schon getan. Es zeigt, dass meine ArrayList die 5 Elemente enthält, aber nur die letzte Zeile (das 5. Element) anzeigt. – Bayram

Antwort

1

Felder in Ihrer ImageInfos Klasse sind statisch und werden daher mit allen Instanzen der Klasse geteilt. Um die Felder instanzspezifisch zu machen, löschen Sie das Schlüsselwort static.

+0

Sie sind richtig Laalto. es funktioniert perfekt. Danke an euch alle – Bayram

0

wenn Sie cardview_layout.xml für recyclerview schaffen sollten diese Dinge folgen:

Immer Verwenden Sie "wrap_content" für die Höhe der Zeile, andernfalls wird in "match_parent" der gesamte Bildschirm für eine einzelne Zeile belegt.

Verwandte Themen