Ошибка при запуске новой операции по обновлению базы данных переработчика - PullRequest
0 голосов
/ 06 ноября 2019

Я пытаюсь передать некоторые детали в следующем упражнении, но получаю сообщение об ошибке при запуске новой Намеренной ошибки:

Вызвано android.database.CursorIndexOutOfBoundsException: Индекс -1 запрошен, с размером 1 в android.database.AbstractCursor.checkPosition (AbstractCursor.java:468) в android.database.AbstractWindowedCursor.checkPosition (AbstractWindowedCursor.java:136) в android.database.AbstractWindowedCursor.getString:orjjj) в android.database.CursorWrapper.getString (CursorWrapper.java:137) в com.shashankesh.ms.ItemIncrsDecrs.onCreate (ItemIncrsDecrs.java:42) в android.app.Activity.performCreate (Activity.java:7032) в андроиде.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,
                    selection,
                    selectionArgs,
                    null,
                    null,
                    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;
}

Пожалуйста, помогите мне устранить вышеуказанную ошибку

1 Ответ

0 голосов
/ 06 ноября 2019

вам нужно вызвать cursor.movetofirst () перед извлечением из него каких-либо данных. Так что звоните перед вашей линией mItemName = cursor.getString(cursor.getColumnIndex(ItemContract.ItemEntry.COLUMN_ITEM_NAME));

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...