java - onActivityResult 应该调用 super.onActivityResult
问题描述
我是 Android Studio 的新手,正在尝试创建一个简单的应用程序。当我需要使用 onActivityResult 保存其他活动的数据时,该应用程序不断崩溃:
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == 1) {
if (resultCode == RESULT_OK) {
Job updatedJobDetails = (Job)data.getSerializableExtra("updatedJobDetails");
int position = data.getIntExtra("pos", -1);
adapter.remove(adapter.getItem(position));
adapter.insert(updatedJobDetails, position);
}
}
}
首先它说,我需要
onActivityResult 应该调用 super.onActivityResult
但是当我这样做时,一旦我使用该方法,它就会崩溃。日志猫:
E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.smapassignment01, PID: 6809
java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=1, result=-1, data=Intent { (has extras) }} to activity {com.example.smapassignment01/com.example.smapassignment01.MainActivity}: java.lang.ArrayIndexOutOfBoundsException: length=15; index=-1
at android.app.ActivityThread.deliverResults(ActivityThread.java:4360)
at android.app.ActivityThread.handleSendResult(ActivityThread.java:4402)
at android.app.servertransaction.ActivityResultItem.execute(ActivityResultItem.java:49)
at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:108)
at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:68)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1808)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loop(Looper.java:193)
at android.app.ActivityThread.main(ActivityThread.java:6669)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)
Caused by: java.lang.ArrayIndexOutOfBoundsException: length=15; index=-1
at java.util.ArrayList.get(ArrayList.java:439)
at android.widget.ArrayAdapter.getItem(ArrayAdapter.java:393)
at com.example.smapassignment01.MainActivity.onActivityResult(MainActivity.java:122)
at android.app.Activity.dispatchActivityResult(Activity.java:7454)
at android.app.ActivityThread.deliverResults(ActivityThread.java:4353)
at android.app.ActivityThread.handleSendResult(ActivityThread.java:4402)
at android.app.servertransaction.ActivityResultItem.execute(ActivityResultItem.java:49)
at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:108)
at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:68)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1808)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loop(Looper.java:193)
at android.app.ActivityThread.main(ActivityThread.java:6669)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)
I/Process:发送信号。PID:6809 SIG:9 进程 6809 终止。
我真的无法从 logcat 报告中读取,我做错了什么。
根据这个 SO-question这是因为 getAdapterPosition - 但我什至不使用它,所以我完全迷路了,现在已经使用了几个小时,卡住了。
更新:
只是为了表明,我的 pos 已经坐在另一个活动中,从那里应用程序崩溃:
btnSaveNote.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
job.setUserNotes(etJobNotes.getText().toString());
if (!cbAppliedJob.isChecked()){
job.setJobApplied(false);
}
else{
job.setJobApplied(true);
}
Intent data = new Intent();
position = getIntent().getIntExtra("pos", -1);
data.putExtra("pos", position);
data.putExtra("updatedJobDetails", job);
setResult(RESULT_OK, data);
finish();
}
});
解决方案
推荐阅读
- regex - 正则表达式后得到这个词
- amazon-web-services - 如何在 Elastic Beanstalk 环境变量中使用 AWS 参数存储变量?
- scala - Intellij Idea 2019.1.3 无法运行 ScalaTests
- reactjs - @material-ui/Icons 错误:对象作为 React 子项无效
- android - 如何在firebase实时数据库触发器上使用邮递员发送通知?
- javascript - 为什么 JavaScript 中 RegExp 的 matchAll 与其他方法如此不同?
- javascript - 如何使用随机选择的图像创建 Google 表单?
- mysql - MYSQL 删除所有行,但 select 上的相同查询仅返回 3 行
- django - 无法通过迁移将新模型添加到 Django Postgres DB
- python - 将新变量添加到 Python 中的数据集后的关键错误