启动新活动以更新recyclerview数据库时出错

我正在尝试在下一个活动中转移一些详细信息,但是在启动新的Intent时出现错误 错误:

  

由android.database.CursorIndexOutOfBoundsException引起:请求的索引-1,大小为1           在android.database.AbstractCursor.checkPosition(AbstractCursor.java:468)           在android.database.AbstractWindowedCursor.checkPosition(AbstractWindowedCursor.java:136)           在android.database.AbstractWindowedCursor.getString(AbstractWindowedCursor.java:50)           在android.database.CursorWrapper.getString(CursorWrapper.java:137)           在com.shashankesh.ms.ItemIncrsDecrs.onCreate(ItemIncrsDecrs.java:42)           在android.app.activity.performCreate(activity.java:7032)           在android.app.activity.performCreate(activity.java:7023)           在android.app.Instrumentation.callactivityOnCreate(Instrumentation.java:1236)           在android.app.activityThread.performLaunchactivity(activityThread.java:2814)

我要启动的父活动是:

@Override
public void onClick(int Id) {
    Toast.makeText(this,String.format("ID: "+Id),Toast.LENGTH_LONG).show();
    Intent startInt = new Intent(Itemactivity.this,ItemIncrsDecrs.class);
    startInt.putExtra("ID",Id);
    startactivity(startInt);

}

这是我正在启动的活动

public class ItemIncrsDecrs extends AppCompatactivity {
private Toolbar toolbar;
private SQLiteDatabase mDb;
private int mId;
private String mItemName;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_item_incrs_decrs);
    toolbar = (Toolbar) findViewById(R.id.incrs_decrs_toolbar);
    setSupportactionBar(toolbar);


    // Create a DB helper (this will create the DB if run for the first time)
    ItemDbHelper dbHelper = new ItemDbHelper(this);
    // Keep a reference to the mDb until paused or killed. Get a writable database
    // because you will be adding restaurant customers
    Intent intentThatStartedThisactivity = getIntent();

    if (intentThatStartedThisactivity != null) {
        if (intentThatStartedThisactivity.hasExtra("ID")) {
            mId = intentThatStartedThisactivity.getIntExtra("ID",0);
        }
    }
    mDb = dbHelper.getwritabledatabase();
    Cursor cursor = queryItemName();
    mItemName = cursor.getString(cursor.getcolumnIndex(ItemContract.ItemEntry.COLUMN_ITEM_NAME));
    getSupportactionBar().setTitle("Update Item: " + mItemName);
    //updateItem();
}

private Cursor queryItemName() {
    String[] columns = {ItemContract.ItemEntry.COLUMN_ITEM_NAME};
    String selection = ItemContract.ItemEntry._ID + " = ?";
    String[] selectionArgs = {String.valueOf(mId)};
    String groupBy = null;
    String having = null;
    String orderBy = ItemContract.ItemEntry.COLUMN_TIMESTAMP;
    return getcontentResolver().query(
            ItemContract.ItemEntry.CONTENT_URI,null,selection,selectionArgs,ItemContract.ItemEntry.COLUMN_TIMESTAMP
    );
}

我正在启动上述活动,以实现在新活动中更新项目的值,并在此之后返回到父活动。

对于内容提供商,我正在使用此代码

@Override
public Cursor query(@NonNull Uri uri,String[] projection,String selection,String[] selectionArgs,String sortOrder) {

    // Get access to underlying database (read-only for query)
    final SQLiteDatabase db = mItemDbHelper.getReadableDatabase();

    // Write URI match code and set a variable to return a Cursor
    int match = sUriMatcher.match(uri);
    Cursor retCursor;

    //  Query for the tasks directory and write a default case
    switch (match) {
        // Query for the tasks directory
        case TASKS:
            retCursor =  db.query(TABLE_NAME,projection,sortOrder);
            break;
        // Default exception
        default:
            throw new UnsupportedOperationException("Unknown uri: " + uri);
    }

    //  Set a notification URI on the Cursor and return that Cursor
    retCursor.setNotificationUri(getcontext().getcontentResolver(),uri);

    // Return the desired Cursor
    return retCursor;
}

请帮助我解决以上错误

qinjilei 回答:启动新活动以更新recyclerview数据库时出错

您需要先调用cursor.movetofirst(),然后才能从中检索任何数据。因此,请在您的行mItemName = cursor.getString(cursor.getColumnIndex(ItemContract.ItemEntry.COLUMN_ITEM_NAME));

前调用它
本文链接:https://www.f2er.com/3153419.html

大家都在问