两个启动相同 class 的 Intent,getExtras() 导致 IndexOutOfBoundsException
Two Intents that start the same class, getExtras() cause IndexOutOfBoundsException
我需要启动一个 Activity(比如 WriteAtivity),两次,但模式不同。
在 MainActivity 中发生了什么。
例如:
addNote.setOnClickListener( new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent writeAct = new Intent(MainActivity.this, WriteActivity
// HERE, I DO NOT NEED OF putExtra()
startActivity(writeAct);
}
});
和
editNote.setOnClickListener( new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent visualizza = new Intent(MainActivity.this, WriteActivity.class);
// HERE INSTEAD I HAVE NEED OF putExtra()
visualizza.putExtra("posizione", position);
startActivity(visualizza);
}
});
并在onCreate()中写入Activity
intent = getIntent().getExtras().getInt("posizione");
rifTitleNote.setText(listNote.get(posizione).getTitle());
如您所见,在 one 中我不需要 putExtra() 而在 second 中我需要。
我这样做是因为我使用 WriteActivity,首先,写笔记,然后,编辑笔记。
这在任何情况下都会导致 IndexOutOfBoundsException: Invalid index 0, size is 0
你知道我怎样才能克服这个问题吗?
或者给我建议如何做到这一点?
谢谢! :D
只需使用带默认值的getIntExtra()
,使用前确保该值未设置为默认值。
Intent intent = this.getIntent();
int posizione = intent.getIntExtra("posizione", -1);
if (posizione != -1){
rifTitleNote.setText(listNote.get(posizione).getTitle());
}
检查extra是否存在,如果存在则进行相应处理。参见 Android's Intent documentation for hasExtra。
if (getIntent().hasExtra("posizione")) {
// Do stuff with extra
}
您还可以在 Intent 上设置一个操作,指示 Activity 应如何处理传入的 Intent。这可能是 "better" 方法,但根据您的项目可能有点矫枉过正。
我需要启动一个 Activity(比如 WriteAtivity),两次,但模式不同。 在 MainActivity 中发生了什么。
例如:
addNote.setOnClickListener( new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent writeAct = new Intent(MainActivity.this, WriteActivity
// HERE, I DO NOT NEED OF putExtra()
startActivity(writeAct);
}
});
和
editNote.setOnClickListener( new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent visualizza = new Intent(MainActivity.this, WriteActivity.class);
// HERE INSTEAD I HAVE NEED OF putExtra()
visualizza.putExtra("posizione", position);
startActivity(visualizza);
}
});
并在onCreate()中写入Activity
intent = getIntent().getExtras().getInt("posizione");
rifTitleNote.setText(listNote.get(posizione).getTitle());
如您所见,在 one 中我不需要 putExtra() 而在 second 中我需要。
我这样做是因为我使用 WriteActivity,首先,写笔记,然后,编辑笔记。 这在任何情况下都会导致 IndexOutOfBoundsException: Invalid index 0, size is 0
你知道我怎样才能克服这个问题吗? 或者给我建议如何做到这一点? 谢谢! :D
只需使用带默认值的getIntExtra()
,使用前确保该值未设置为默认值。
Intent intent = this.getIntent();
int posizione = intent.getIntExtra("posizione", -1);
if (posizione != -1){
rifTitleNote.setText(listNote.get(posizione).getTitle());
}
检查extra是否存在,如果存在则进行相应处理。参见 Android's Intent documentation for hasExtra。
if (getIntent().hasExtra("posizione")) {
// Do stuff with extra
}
您还可以在 Intent 上设置一个操作,指示 Activity 应如何处理传入的 Intent。这可能是 "better" 方法,但根据您的项目可能有点矫枉过正。