Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/221.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/58.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 无法从包含3行3列的游标窗口中读取第0行第3列_Java_Android_Database - Fatal编程技术网

Java 无法从包含3行3列的游标窗口中读取第0行第3列

Java 无法从包含3行3列的游标窗口中读取第0行第3列,java,android,database,Java,Android,Database,我知道以前有人问过这个问题,但我似乎在其他帖子中找不到答案。我有一个错误“无法从一个有3行3列的游标窗口中读取第0行第3列”,以及“无法从游标窗口中读取第0行第3列”。我正在尝试为Android制作一个待办事项列表。我不确定为什么会出现这个错误,因为我知道我的数据库有4列(0到3),就像错误说的那样,我正在尝试读取第0行第3列(这应该是可能的,因为有3列),但它仍然会给我错误。下面是代码(它在文件中分开,我将把文件放在错误首先发生的位置(顺便说一句,它在:String taskrementer=

我知道以前有人问过这个问题,但我似乎在其他帖子中找不到答案。我有一个错误“无法从一个有3行3列的游标窗口中读取第0行第3列”,以及“无法从游标窗口中读取第0行第3列”。我正在尝试为Android制作一个待办事项列表。我不确定为什么会出现这个错误,因为我知道我的数据库有4列(0到3),就像错误说的那样,我正在尝试读取第0行第3列(这应该是可能的,因为有3列),但它仍然会给我错误。下面是代码(它在文件中分开,我将把文件放在错误首先发生的位置(顺便说一句,它在:
String taskrementer=cursor.getString(rementercolumnidex);

希望你们能帮助我,很抱歉问了一个以前被问过的问题,但是我在其他帖子里找不到答案

编辑:我认为这是您需要的代码:

CatalogActivity.java

some imports...
public class CatalogActivity extends AppCompatActivity implements
        LoaderManager.LoaderCallbacks<Cursor> {

    private static final int TASK_LOADER = 0;

    CursorAdapter mCursorAdapter;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_catalog);

        FloatingActionButton fab = findViewById(R.id.fab);
        fab.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Intent intent = new Intent(CatalogActivity.this, EditorActivity.class);
                startActivity(intent);
            }
        });

        ListView taskListView = findViewById(R.id.list);

        View emptyView = findViewById(R.id.empty_view);
        taskListView.setEmptyView(emptyView);

        mCursorAdapter = new CursorAdapter(this, null);
        taskListView.setAdapter(mCursorAdapter);

        taskListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> adapterView, View view, int position, long id) {
                Intent intent = new Intent(CatalogActivity.this, EditorActivity.class);

                Uri currentTaskUri = ContentUris.withAppendedId(Entry.CONTENT_URI, id);

                intent.setData(currentTaskUri);

                startActivity(intent);
            }
        });

        getLoaderManager().initLoader(TASK_LOADER, null, this);
    }

    private void deleteAllTasks() {
        int rowsDeleted = getContentResolver().delete(Entry.CONTENT_URI, null, null);
        Log.v("CatalogActivity", rowsDeleted + " rows deleted from task database");
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.menu_catalog, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()) {
            case R.id.action_insert_dummy_data:
                insertTask();
                return true;
            case R.id.action_delete_all_entries:
                deleteAllTasks();
                return true;
        }
        return super.onOptionsItemSelected(item);
    }

    @Override
    public Loader<Cursor> onCreateLoader(int i, Bundle bundle) {
        String[] projection = {
                Entry._ID,
                Entry.COLUMN_TASK_NAME,
                String.valueOf(Entry.COLUMN_TASK_COMPLETED)};

        return new CursorLoader(this,   // Parent activity context
                Entry.CONTENT_URI,      // Provider content URI to query
                projection,             // Columns to include in the resulting Cursor
                null,                   // No selection clause
                null,                   // No selection arguments
                null);                  // Default sort order
    }

    @Override
    public void onLoadFinished(Loader<Cursor> loader, Cursor data) {
        mCursorAdapter.swapCursor(data);
    }

    @Override
    public void onLoaderReset(Loader<Cursor> loader) {
        mCursorAdapter.swapCursor(null);
    }
}
一些导入。。。
公共类CatalogActivity扩展了AppCompatActivity实现
LoaderManager.LoaderCallbacks{
私有静态最终整型任务\u加载程序=0;
游标适配器mCursorAdapter;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_目录);
FloatingActionButton fab=findViewById(R.id.fab);
fab.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图){
意向意向=新意向(CatalogActivity.this、EditorActivity.class);
星触觉(意向);
}
});
ListView任务ListView=findViewById(R.id.list);
视图emptyView=findViewById(R.id.empty\u视图);
taskListView.setEmptyView(emptyView);
mCursorAdapter=新游标适配器(此为空);
setAdapter(mCursorAdapter);
taskListView.setOnItemClickListener(新的AdapterView.OnItemClickListener(){
@凌驾
public void onItemClick(AdapterView AdapterView,视图视图,整型位置,长id){
意向意向=新意向(CatalogActivity.this、EditorActivity.class);
Uri currentTaskUri=ContentUris.withAppendedId(Entry.CONTENT\u Uri,id);
intent.setData(currentTaskUri);
星触觉(意向);
}
});
getLoaderManager().initLoader(任务加载器,null,this);
}
私有void deleteAllTasks(){
int rowsDeleted=getContentResolver().delete(Entry.CONTENT_URI,null,null);
Log.v(“CatalogActivity”,rowsDeleted+“从任务数据库中删除的行”);
}
@凌驾
公共布尔onCreateOptions菜单(菜单){
getMenuInflater().充气(R.menu.menu\u目录,菜单);
返回true;
}
@凌驾
公共布尔值onOptionsItemSelected(菜单项项){
开关(item.getItemId()){
案例R.id.action\u insert\u dummy\u数据:
insertTask();
返回true;
案例R.id.action\u删除\u所有\u条目:
deleteAllTasks();
返回true;
}
返回super.onOptionsItemSelected(项目);
}
@凌驾
公共加载器onCreateLoader(inti,Bundle){
字符串[]投影={
条目。\u ID,
Entry.COLUMN\u任务\u名称,
String.valueOf(Entry.COLUMN_TASK_COMPLETED)};
返回新的游标装入器(此,//父活动上下文
Entry.CONTENT\u URI,//要查询的提供程序内容URI
投影,//要包含在结果游标中的列
null,//无选择子句
null,//没有选择参数
null);//默认排序顺序
}
@凌驾
public void onLoadFinished(加载器、光标数据){
mCursorAdapter.swapCursor(数据);
}
@凌驾
公共void onLoaderReset(加载器){
mCursorAdapter.swapCursor(空);
}
}
此外,我认为,我找到了解决方案。如果我错了,请纠正我:在String[]投影中,除了ID之外,我只有名称,如果它已完成。我猜这里也需要提醒日期


编辑:是的,解决了我自己的问题。我把提醒数据放在字符串[]投影中,现在它可以工作了。没有你们我就做不到(你们给我指出了正确的方向),非常感谢你。你是最棒的!

列索引是基于零的。有3列的游标在索引0、1和2处有值。这可以解释问题标题中列出的异常情况


您发布的代码似乎不是生成该异常的代码。您可以使用
getColumnIndex()获取列索引
对于不在游标中的列返回-1。它从不返回不在游标中的索引。

列索引是基于零的。具有3列的游标在索引0、1和2处具有值。这可以解释问题标题中列出的异常


您发布的代码似乎不是生成该异常的代码。您可以使用
getColumnIndex()获取列索引
对于不在游标中的列返回-1。它从不返回不在游标中的索引。

设置适配器和传递游标的Post代码。设置适配器和传递游标的Post代码。