【问题标题】:Error "Unable to start activity ComponentInfo" cant figure out how to fix it错误“无法启动活动 ComponentInfo”无法弄清楚如何修复它
【发布时间】:2022-01-25 07:21:22
【问题描述】:

我有一些字符串,我在我的第一个活动中写入 Edittext,我试图通过按下按钮将其发送到另一个活动上的 Edittext,但它给了我一个错误“java.lang.RuntimeException:无法启动活动 ComponentInfo{com.example.kp_orginizer/com.example.kp_orginizer.calendar}: android.database.CursorIndexOutOfBoundsException: 请求索引 0,大小为 0"

谁能帮帮我

这是我在第一个 Activity 上的 onCLick 方法:

    public void calendarOR(View v, AdapterView<?> parent, int position, long id) {
        String data = cala.getText().toString();
        Intent intent = new Intent(this, calendar.class);
        intent.putExtra("id",data);
        startActivity(intent);

我的第二种方法:

Bundle extras = getIntent().getExtras();
if (extras != null) {
    userId = extras.getString("id");
}
if (userId !=null) {
    userCursor = db.rawQuery("select * from " + dbelper.TABLE + " where " + dbelper.COLUMN_ID + "=?", new String[]{userId});
    userCursor.moveToFirst();
    date.setText(userCursor.getString(1));
    userCursor.close();
}

它在抱怨“date.setText(userCursor.getString(1));”字符串

这是一个错误代码:

    E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.example.kp_orginizer, PID: 7787
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.kp_orginizer/com.example.kp_orginizer.calendar}: android.database.CursorIndexOutOfBoundsException: Index 0 requested, with a size of 0
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3270)
    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3409)
    at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:83)
    at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135)
    at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95)
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2016)
    at android.os.Handler.dispatchMessage(Handler.java:107)
    at android.os.Looper.loop(Looper.java:214)
    at android.app.ActivityThread.main(ActivityThread.java:7356)
    at java.lang.reflect.Method.invoke(Native Method)
    at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:492)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:930)
 Caused by: android.database.CursorIndexOutOfBoundsException: Index 0 requested, with a size of 0
    at android.database.AbstractCursor.checkPosition(AbstractCursor.java:515)
    at android.database.AbstractWindowedCursor.checkPosition(AbstractWindowedCursor.java:138)
    at android.database.AbstractWindowedCursor.getString(AbstractWindowedCursor.java:52)
    at com.example.kp_orginizer.calendar.onCreate(calendar.java:94)
    at android.app.Activity.performCreate(Activity.java:7802)
    at android.app.Activity.performCreate(Activity.java:7791)
    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1299)
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3245)
    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3409) 
    at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:83) 
    at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135) 
    at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95) 
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2016) 
    at android.os.Handler.dispatchMessage(Handler.java:107) 
    at android.os.Looper.loop(Looper.java:214) 
    at android.app.ActivityThread.main(ActivityThread.java:7356) 
    at java.lang.reflect.Method.invoke(Native Method) 
    at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:492) 
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:930) 

这就是我填充数据库的方式:

    public void save(View view) {

        ContentValues cv = new ContentValues();
        int idishnik = 1;
        cv.put(dbelper.COLUMN_NOTE, note.getText().toString());
        cv.put(dbelper.COLUMN_DATE, cala.getText().toString());
        cv.put(dbelper.ID_TABLITSY, idishnik);

        if (userId > 0) {
            db.update(dbelper.TABLE, cv, dbelper.COLUMN_ID + "=" + userId, null);
        } else {
            db.insert(dbelper.TABLE, null, cv);
        }
        goHome();
    }

【问题讨论】:

  • 我现在添加了我的方法来填充数据库,如果我没听错的话
  • 您是否尝试过在数据库中设置 userId 并在访问时再次打印以确保它们匹配?
  • 试试System.out.println("DEBUG: adding/accessing userId = " + userId);然后在logcat中搜索“DEBUG:”
  • 您发送的用户 ID 是 cala EditText 中的任何内容。如果这不是您打算发送的内容,则需要修复该逻辑。
  • 很高兴你能弄明白,希望在这个过程中学到一些调试技术!我会为此添加一个答案。

标签: java android database android-intent


【解决方案1】:

您传递的 userId 似乎不是有效/当前的数据库密钥。如果您只想显示您在 EditText 中传递的内容,而不是使用它从数据库中获取某些内容,那么您只需这样做

if (userId != null) {
    date.setText(userId);
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-04-10
    • 1970-01-01
    • 1970-01-01
    • 2012-11-23
    • 1970-01-01
    相关资源
    最近更新 更多