我正在尝试从recyclerview中的sqlite填充一些数据。在sqlite中插入的时候我可以在日志中看到插入的数据但是在recyclerview中显示它显示indexOutOfBoundException。我在堆栈上找不到答案。我有发布了我的recyclerview OnBindViewHolder,我的sqlite表和我插入数据的代码。请帮帮我
@Override
public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View itemView = LayoutInflater.from(parent.getContext())
.inflate(R.layout.queue_list_item, parent, false);
return new MyViewHolder(itemView);
}
@Override
public void onBindViewHolder(final MyViewHolder holder, final int position) {
// final QueueModel queueModel = queueList.get(position);
queueModel = queueList.get(position);
holder.surveyId.setText(queueModel.getName());
holder.dateTime.setText(queueModel.getDateTime());
holder.status.setText(queueModel.getStatus());
if(!holder.status.getText().equals("Queued"))
{
holder.sync.setVisibility(View.INVISIBLE);
}
//Toast.makeText(context,role,Toast.LENGTH_SHORT).show();
holder.sync.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
readFromFile(queueList.get(position).getFileName());
//sendFormToServer(queueList.get(position).get);
}
});
//holder.year.setText(entityModel.getYear());
}
我的sqlite表
public class QueueTable {
Context context;
public QueueModel queueModel;
public ArrayList<QueueModel> queueDetails;
public QueueTable() {
//this.context=context;
}
public static String createTable() {
return "CREATE TABLE " + QueueModel.TABLE + "(" + QueueModel.ID + " INTEGER PRIMARY KEY AUTOINCREMENT, "
+ QueueModel.SURVEY_ID + " TEXT, " + QueueModel.SURVEY_NAME + " TEXT, " + QueueModel.JSON_SUBFORM + " TEXT, " + QueueModel.DATE_TIME + " TEXT, " + QueueModel.FILENAME + " TEXT, " + QueueModel.STATUS + " TEXT, " + QueueModel.EMP_ID + " TEXT)";
}
public void insert(QueueModel queueModel) {
// entityDetails.clear();
SQLiteDatabase db = DatabaseManager.getInstance().openDatabase();
ContentValues values = new ContentValues();
//values.put(Student.KEY_StudID, student.getStudentId());
//values.put(LocationTableModel.ID, locationTableModel.getId());
values.put(QueueModel.SURVEY_ID, queueModel.getSurveyId());
values.put(QueueModel.SURVEY_NAME, queueModel.getName());
values.put(QueueModel.JSON_SUBFORM, queueModel.getSubformJSON());
values.put(QueueModel.DATE_TIME, queueModel.getDateTime());
values.put(QueueModel.FILENAME, queueModel.getFileName());
values.put(QueueModel.STATUS, queueModel.getStatus());
values.put(QueueModel.EMP_ID, queueModel.getEmp_id());
// Inserting Row
db.insert(QueueModel.TABLE, null, values);
DatabaseManager.getInstance().closeDatabase();
}
public ArrayList<QueueModel> getQueueDetails() {
queueDetails = new ArrayList<QueueModel>();
queueDetails.clear();
//entityDetails.clear();
SQLiteDatabase db = DatabaseManager.getInstance().openDatabase();
/* String selectQuery = " SELECT Location." + LocationTableModel.LOCATION_DATETIME
+ ", Location." + LocationTableModel.LOCATION_LATITUDE
+ ", Location." + LocationTableModel.LOCATION_LONGITUDE
+ ", Location." + LocationTableModel.LOCATION_PROVIDER;*/
String selectQuery = "SELECT * FROM Queue";
Log.d("QUEUE SELECT QUERY", selectQuery);
Cursor cursor = db.rawQuery(selectQuery, null);
// looping through all rows and adding to list
if (cursor.moveToFirst()) {
do {
queueModel = new QueueModel();
queueModel.setId(cursor.getInt(cursor.getColumnIndex(QueueModel.ID)));
Log.d("Queue row id", String.valueOf(cursor.getInt(cursor.getColumnIndex(QueueModel.ID))));
queueModel.setSurveyId(cursor.getString(cursor.getColumnIndex(QueueModel.SURVEY_ID)));
Log.d("Queue survey id", cursor.getString(cursor.getColumnIndex(QueueModel.SURVEY_ID)));
queueModel.setName(cursor.getString(cursor.getColumnIndex(QueueModel.SURVEY_NAME)));
Log.d("Queue name", cursor.getString(cursor.getColumnIndex(QueueModel.SURVEY_NAME)));
queueModel.setFileName(cursor.getString(cursor.getColumnIndex(QueueModel.FILENAME)));
Log.d("Queue filename", cursor.getString(cursor.getColumnIndex(QueueModel.FILENAME)));
queueModel.setSubformJSON(cursor.getString(cursor.getColumnIndex(QueueModel.JSON_SUBFORM)));
Log.d("Queue subform json",cursor.getString(cursor.getColumnIndex(QueueModel.JSON_SUBFORM)));
queueModel.setEmp_id(cursor.getString(cursor.getColumnIndex(QueueModel.EMP_ID)));
Log.d("Queue emp_id", cursor.getString(cursor.getColumnIndex(QueueModel.EMP_ID)));
queueModel.setDateTime(cursor.getString(cursor.getColumnIndex(QueueModel.DATE_TIME)));
Log.d("Queue datetime", cursor.getString(cursor.getColumnIndex(QueueModel.DATE_TIME)));
queueModel.setStatus(cursor.getString(cursor.getColumnIndex(QueueModel.STATUS)));
Log.d("Queue status",cursor.getString(cursor.getColumnIndex(QueueModel.STATUS)));
queueDetails.add(queueModel);
} while (cursor.moveToNext());
}
cursor.close();
DatabaseManager.getInstance().closeDatabase();
return queueDetails;
}
public void delete() {
SQLiteDatabase db = DatabaseManager.getInstance().openDatabase();
db.delete(QueueModel.TABLE, null, null);
DatabaseManager.getInstance().closeDatabase();
}
public long getProfilesCount() {
SQLiteDatabase db = DatabaseManager.getInstance().openDatabase();
long count = DatabaseUtils.queryNumEntries(db, EntityTableModel.TABLE);
db.close();
return count;
}
}
我在sqlite中的插入
queueModel = new QueueModel();
queueModel.setName(completeFormSurveyId);
queueModel.setSurveyId(completeFormSurveyId);
queueModel.setFileName(completeJsonFilename);
queueModel.setSubformJSON(jsonWithSubFileLocation);
queueModel.setDateTime(dateTime);
queueModel.setStatus("Queued");
queueModel.setEmp_id(getPreference());
queueTable.insert(queueModel);
答案 0 :(得分:0)
我所做的一切都是这样,并且它有效。对于所有可能面临同样问题的人
try {
queueModel = queueList.get(position);
holder.surveyId.setText(queueModel.getName());
holder.dateTime.setText(queueModel.getDateTime());
holder.status.setText(queueModel.getStatus());
if (!holder.status.getText().equals("Queued")) {
holder.sync.setVisibility(View.INVISIBLE);
}
}
catch (IndexOutOfBoundsException e)
{
e.printStackTrace();
}