数据显示在sqlite中,但在recyclelerview中填充时indexoutof绑定异常

时间:2018-04-06 06:27:01

标签: android android-recyclerview android-sqlite

我正在尝试从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);

1 个答案:

答案 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();
    }