私はアプリを作成しましたが、リリース後、一部のユーザーが厄介なバグを経験しているようです。単純に再現できないもの。
これには3つのアクティビティが含まれます。
アクティビティ1:スーパーアクティビティ
public abstract class SuperActivity extends Activity
アクティビティ2:MainActivity
public class MainActivity extends SuperActivity {
private MyObject myMemberVariable;
@Override
public void onCreate(Bundle savedInstanceState) {
//Get the intent that started this activity. I am always providing Extras, so this is never null.
Bundle bundle = getIntent().getExtras();
//Set stuff in myMemberVariable from these extras. This never fails either.
myMemberVariable = BundleLoader.loadFromBundle(bundle);
}
@Override
public void onListDialogClick(int requestCode, String[] options, int position, String extra) {
//THIS is the place where, according to my stacktrace from the DeveloperConsole, the null pointer arises.
myMemberVariable.setXY(position);
}
アクティビティ3:ListDialogActivity
public class ListDialogActivity extends SuperActivity
ここで行っているのは、MainActivityからListDialogActivityを開始して、ユーザーにいくつかの選択肢を提示することです。彼が選択を行うと、ListDialogActivityは結果を設定して終了します。SuperActivityで私は持っています:
onActivityResult(int requestCode, int resultCode, Intent data) {
//if activityRequestCode was ListDialogRequestCode and the Result was RESULT_OK, then call onListDialogClick(..) with the appropriate values.
}
これが私のMainActivityのonListDialogClick()が呼び出される方法です(つまり、通常のonActivityResult()と考えることができます)。そこでは、myMemberVariableがnullであるため、一部のユーザーでnullポインター例外が発生します。
ここで何が起こっているのか理解できません。また、電話の回転を処理するためにインスタンスの状態を保存していますが、保存しなかった場合でも、onCreateが呼び出されるため、nullにはならず、状態が失われ、最初のインテントから再作成されるだけです。
誰かがこれがどのように可能であり、ここで何が起こっているのかを私に説明できますか?Androidの何かを誤解しましたか?なぜそれは少数の人々にしか起こらないのですか?これの理由は何でしょうか?どんなに小さな提案でも本当に感謝しています。
本当にありがとう!