ошибка java .lang.IllegalStateException: позиция недействительна - PullRequest
0 голосов
/ 10 февраля 2020

Я пытаюсь разработать 2 приложения в 1 провайдере (Content Provider), но есть проблема в написанном мною коде, таком как скрипт и logcat ниже. Я поместил NoteAdaper в первое приложение для отображения данных, введенных через sqlite. с видом переработчика, но первое или второе приложение не отображало введенные данные. Есть ли решение этой проблемы?

public class NoteAdapter extends RecyclerView.Adapter<NoteAdapter.NoteViewHolder> {
private Cursor listNotes;
private Activity activity;

public NoteAdapter(Activity activity){
    this.activity = activity;
}

public void setListNote(Cursor listNotes) {
    this.listNotes = listNotes;
}

@Override
public NoteViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
    View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_note, parent,false);
    return new NoteViewHolder(view);
}

@Override
public void onBindViewHolder(NoteViewHolder holder, int position) {
    final Note note = getItem(position);
    holder.tvTitle.setText(note.getTitle());
    holder.tvDescription.setText(note.getDescription());
    holder.tvDate.setText(note.getDate());
    holder.cvNote.setOnClickListener(new CustomOnItemClickListener(position, new CustomOnItemClickListener.OnItemClickCallback() {
        @Override
        public void onItemClicked(View view, int position) {
            Intent intent = new Intent(activity, FormAddUpdateActivity.class);

            Uri uri = Uri.parse(CONTENT_URI+"/"+note.getId());
            intent.setData(uri);
            activity.startActivityForResult(intent,FormAddUpdateActivity.REQUEST_UPDATE);
        }
    }));
}

@Override
public int getItemCount() {
    if(listNotes == null) return 0;
    return listNotes.getCount();
}

private Note getItem(int position){
    if (listNotes.moveToPosition(position)){
        throw new IllegalStateException("Position invalid");
    }
    return new Note(listNotes);
}

class NoteViewHolder extends RecyclerView.ViewHolder{
    TextView tvTitle, tvDescription, tvDate;
    CardView cvNote;

    NoteViewHolder(View itemView){
        super(itemView);
        tvTitle = (TextView)itemView.findViewById(R.id.tv_item_title);
        tvDescription = (TextView)itemView.findViewById(R.id.tv_item_description);
        tvDate = (TextView)itemView.findViewById(R.id.tv_item_date);
        cvNote = (CardView)itemView.findViewById(R.id.cv_item_note);
    }
}
}

Logcat:

java .lang.IllegalStateException: недопустимая позиция в com.project.ichwan.provider.adapter.NoteAdapter.getItem (NoteAdapter. java: 68) в com.project.ichwan.provider.adapter.NoteAdapter.onBindViewHolder (NoteAdapter. java : 44) в com.project.ichwan.provider.adapter.NoteAdapter.onBindViewHolder (NoteAdapter. java: 24) в androidx.recyclerview.widget.RecyclerView $ Adapter.onBindViewHolder (RecyclerView. java: 7065) в androidx. recyclerview.widget.RecyclerView $ Adapter.bindViewHolder (RecyclerView. java: 7107) в androidx.recyclerview.widget.RecyclerView $ Recycler.tryBindViewHolderByDeadline (Recyc lerView. java: 6012) в androidx.recyclerview.widget.RecyclerView $ Recycler.tryGetViewHolderForPositionByDeadline (RecyclerView. java: 6279)

1 Ответ

2 голосов
/ 10 февраля 2020

Из документации Cursor.moveToPosition

Этот метод вернет true, если назначение запроса было достижимо, в противном случае он возвращает false.

Похоже, вы должны инвертировать listNotes .moveToPosition (position):

private Note getItem(int position){
    if (!listNotes.moveToPosition(position)){
        throw new IllegalStateException("Position invalid");
    }
    return new Note(listNotes);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...