错误java.lang.IllegalStateException:位置无效

错误java.lang.IllegalStateException:位置无效,java,android,sqlite,android-recyclerview,Java,Android,Sqlite,Android Recyclerview,我正试图在一个提供商(内容提供商)中开发两个应用程序,但我编写的代码中有一个问题,例如下面的脚本和logcat,我将记事本放在第一个应用程序中,以显示通过sqlite以recycler视图输入的数据,但第一个或第二个应用程序未能显示输入的数据,这个问题有解决办法吗 public class NoteAdapter extends RecyclerView.Adapter<NoteAdapter.NoteViewHolder> { private Cursor listNotes; p

我正试图在一个提供商(内容提供商)中开发两个应用程序,但我编写的代码中有一个问题,例如下面的脚本和logcat,我将记事本放在第一个应用程序中,以显示通过sqlite以recycler视图输入的数据,但第一个或第二个应用程序未能显示输入的数据,这个问题有解决办法吗

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);
    }
}
}
公共类NoteAdapter扩展了RecyclerView.Adapter{ 私人票据; 私人活动; 公共NoteAdapter(活动){ 这个。活动=活动; } 公共作废setListNote(游标listNotes){ this.listNotes=listNotes; } @凌驾 public NoteViewHolder onCreateViewHolder(视图组父级,int-viewType){ View=LayoutFlater.from(parent.getContext()).flate(R.layout.item_注意,parent,false); 返回新的NoteViewHolder(视图); } @凌驾 BindViewHolder上的公共无效(NoteViewHolder,int位置){ 最终注释=获取项目(位置); holder.tvTitle.setText(note.getTitle()); holder.tvDescription.setText(note.getDescription()); holder.tvDate.setText(note.getDate()); holder.cvNote.setOnClickListener(新CustomOnItemClickListener(位置,新CustomOnItemClickListener.OnItemClickCallback()){ @凌驾 已单击公共空视图(视图,内部位置){ 意向意向=新意向(活动,FormAddUpdateActivity.class); Uri=Uri.parse(CONTENT_Uri+“/”+note.getId()); intent.setData(uri); activity.startActivityForResult(intent,FormAddUpdateActivity.REQUEST\u UPDATE); } })); } @凌驾 public int getItemCount(){ if(listNotes==null)返回0; 返回listNotes.getCount(); } 私人票据getItem(内部位置){ if(列表注释.移动位置(位置)){ 抛出新的非法状态异常(“位置无效”); } 返回新注释(listNotes); } 类NoteViewHolder扩展了RecyclerView.ViewHolder{ text查看电视标题、电视描述、电视日期; CardView cvNote; NoteViewHolder(查看项目视图){ 超级(项目视图); tvTitle=(TextView)itemView.findViewById(R.id.tv\u item\u title); tvDescription=(TextView)itemView.findViewById(R.id.tv\u item\u description); tvDate=(TextView)itemView.findViewById(R.id.tv\u item\u date); cvNote=(cardwiew)itemView.findviewbyd(R.id.cv\u item\u note); } } } 日志:

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.TryBindViewHolderByDadline(recyclerview.java:6012)上 在androidx.recyclerview.widget.recyclerview$Recycler.tryGetViewHolderFormositionByDaildate(recyclerview.java:6279)上


从Cursor.moveToPosition文档

如果请求目的地是可访问的,则此方法将返回true,否则返回false

看起来您应该反转listNotes。移动位置(位置):


从Cursor.moveToPosition文档

如果请求目的地是可访问的,则此方法将返回true,否则返回false

看起来您应该反转listNotes。移动位置(位置):


你调试代码了吗?如果是,那么您观察到了什么?您调试了代码吗?如果是,那么你观察到了什么?
private Note getItem(int position){
    if (!listNotes.moveToPosition(position)){
        throw new IllegalStateException("Position invalid");
    }
    return new Note(listNotes);
}