当前位置: 首页 > 知识库问答 >
问题:

如何修复“java.lang.IllegalStateException:无法从CursorWindow读取第2行,第7行”。

叶裕
2023-03-14
public class MusicAdapter extends ArrayAdapter<Music>
{
    Activity context;
    int resource;
    List<Music> objects;

     int Like =0; 

    public MusicAdapter(Activity context, int resource, List<Music> objects)
    {
        super(context, resource, objects);
        this.context = context;
        this.resource = resource;
        this.objects = objects;
    }

    @Override
    public View getView(final int position, View convertView, ViewGroup parent)
    {
        LayoutInflater inflater = this.context.getLayoutInflater();
        View row = inflater.inflate(this.resource,null);

        TextView txtMa = row.<TextView>findViewById(R.id.txtMa);
        TextView txtTen = row.<TextView>findViewById(R.id.txtTen);
        TextView txtCaSi = row.<TextView>findViewById(R.id.txtCaSi);

        final TextView txtLike = row.<TextView>findViewById(R.id.txtLike);        final TextView txtDisLike = row.<TextView>findViewById(R.id.txtDisLike); 
        ImageButton btnLike = row.<ImageButton>findViewById(R.id.btnLike);
        ImageButton btnDisLike = row.<ImageButton>findViewById(R.id.btnDisLike);

        final Music music = this.objects.get(position);
        txtTen.setText(music.getTen());
        txtMa.setText(music.getMa());
        txtCaSi.setText(music.getCaSi());


        btnLike.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                xuLyThich(music, position,txtLike);

            }
        });

        btnDisLike.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v)
            {
                xuLyKhongThich(music,position,txtDisLike);

            }
        });

        return row;
    }

    private void xuLyKhongThich(Music music, int pos,TextView txtDisLike)
    {

        int no_un_like =0;
        Cursor cursor=MainActivity.database.query("ArirangSongList",null,
                null,null,
                null,null,null);


        try {
            if (cursor!= null) {
                cursor.move(pos+1);
                no_un_like = cursor.getInt(8);
                Log.d("no_unlike",String.valueOf(no_un_like));
            }

        } finally {
            cursor.close();
        }

        ContentValues row = new ContentValues();

        row.put("Dislike",  no_un_like+1);


        try{
            MainActivity.database.update("ArirangSongList", row, "MABH= ?", new String[]{String.valueOf(music.getMa())});
            txtDisLike.setText(String.valueOf(no_un_like+1));
        }finally {

        }
    }

    private void xuLyThich(Music music, int pos,TextView txtlike)
    {
         int no_like =0;
        Cursor cursor=MainActivity.database.query("ArirangSongList",null,
                null,null,
                null,null,null);


        try {
            if (cursor!= null) {
                cursor.move(pos+1);
                no_like = cursor.getInt(7);
                Log.d("no_like",String.valueOf(no_like));
            }

        } finally {
            cursor.close();
        }

        ContentValues row = new ContentValues();

        row.put("Like",  no_like+1);


        try{
            MainActivity.database.update("ArirangSongList", row, "MABH= ?", new String[]{String.valueOf(music.getMa())});

            txtlike.setText(String.valueOf(no_like+1));

        }finally {

        }
    }

}
java.lang.IllegalStateException: Couldn't read row 2, col 7 from CursorWindow.  Make sure the Cursor is initialized correctly before accessing data from it.
        at android.database.CursorWindow.nativeGetLong(Native Method)
        at android.database.CursorWindow.getLong(CursorWindow.java:507)
        at android.database.CursorWindow.getInt(CursorWindow.java:574)
        at android.database.AbstractWindowedCursor.getInt(AbstractWindowedCursor.java:69)
        at muitenvang.adapter.MusicAdapter.xuLyThich(MusicAdapter.java:136)
        at muitenvang.adapter.MusicAdapter.access$000(MusicAdapter.java:23)
        at muitenvang.adapter.MusicAdapter$1.onClick(MusicAdapter.java:74)
        at android.view.View.performClick(View.java:4204)
        at android.view.View$PerformClick.run(View.java:17355)
        at android.os.Handler.handleCallback(Handler.java:725)
        at android.os.Handler.dispatchMessage(Handler.java:92)
        at android.os.Looper.loop(Looper.java:137)
        at android.app.ActivityThread.main(ActivityThread.java:5041)
        at java.lang.reflect.Method.invokeNative(Native Method)
        at java.lang.reflect.Method.invoke(Method.java:511)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
        at dalvik.system.NativeStart.main(Native Method)

共有1个答案

麹繁
2023-03-14

您的问题是试图从不存在的光标中读取一行。

这是由于列表中的位置不是偏移量,而是序列号。也就是说,第一个位置为1,而光标中的等效行为0(位置2与行1相关,以此类推)。

按照cursor.move(POS+1)向位置添加1;使异常更有可能发生,因为不检查移动的结果(如果不能使移动为true,则为false)以查看移动是否成功。

尽管不是理想的变化:-

        if (cursor!= null) {
            cursor.move(pos+1);
            no_like = cursor.getInt(7);
            Log.d("no_like",String.valueOf(no_like));
        }

致:-

        if (cursor.move(pos-1) {
            no_like = cursor.getInt(7);
            Log.d("no_like",String.valueOf(no_like));
        } else {
            Log.d("no_like","Ooops could not move to row + String.valueOf(pos));
        }

会更有可能奏效。

    null
 类似资料:
  • 我尝试使用上下文菜单从listview中删除数据,得到了java.lang.IllegalStateException:Could not read row 0,col 2 from CursorWindow。在从游标访问数据之前,请确保游标已正确初始化。 第一行错误AssignmentRecord.SetAssid(Cursor.GetString(2)); 第二个错误是List records

  • 问题内容: 我正在创建一个使用SQLiteDatabase来存储项目的应用程序。但是,从数据库中填充数据时出现错误,应用崩溃。 这是我的数据库- Note.java- NotesDatabase.java- 这是LogCat错误日志- 请帮助我找出我的代码出了什么问题。提前致谢!! 问题答案: 您的主题行具有误导性。您的堆栈跟踪中的异常说 这实际上意味着无法在中找到指定的列,并且-1作为列索引返回

  • 问题内容: 使用数据库时出现问题。当我运行SQLView.java时,出现一个致命异常: 希望有人可以帮助我。我将发布所有与数据库相关的代码。当您需要更多信息时,请告诉我,不要犹豫,索取更多信息! 我认为我的专栏有问题,无法找出原因。 另外,我已经阅读了该网站上的所有相关问题,但是我找不到应该在何处声明我的列以及要添加/更改的内容。有人知道怎么做吗?:) 首先:我的数据库类: SQLite类,用于

  • 我正在开发一个应用程序,下载一些文件,并将其文本保存在文件内容字段中的数据库中。文件大小可以从一些KB到10 MB不等。该应用程序在保存时适用于所有尺寸。在长文件内容记录上使用select语句时出现问题。它给 java.lang.非法状态异常:无法从CursorWindow读取行0, col0 获取这样的行时。字段内容大小是否有限制?如果是这样,那么为什么它让我们在检索时保存并给出错误呢?这是我截

  • 问题内容: 是否有比从Python中的文件一次读取第二行更好的方法呢? 我在2.5.4中。较新版本有何不同? 编辑:删除的答案指出:在py3k中,您需要执行next(f)而不是f.next()。更不用说打印更改 问题答案: import itertools las,需要Python 2.6或更高版本;2.5仅具有,如果有奇数行,它将截断最后一行。当然,提供与生成器相同的功能非常容易。 这是一个更一