Я написал приложение, и теперь, после релиза, некоторые из моих пользователей столкнулись с неприятной ошибкой. Тот, который я просто не в состоянии воспроизвести.
В этом участвуют три Деятельности.
Активность 1: SuperActivity
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
Здесь я запускаю ListDialogActivity из MainActivity, чтобы предоставить пользователю несколько вариантов выбора. Как только он сделал выбор, 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.
}
Итак, вот как вызывается onListDialogClick() в моей MainActivity (так что вы можете просто думать об этом как об обычном onActivityResult()). Там НЕКОТОРЫЕ пользователи сталкиваются с исключением нулевого указателя, потому что myMemberVariable имеет значение null.
Я не могу понять, что здесь происходит. Кроме того, я сохраняю состояние своего экземпляра для обработки поворотов телефона, но даже если бы я этого не делал, поскольку onCreate будет отозван, он все равно не будет нулевым, он только потеряет свое состояние и будет воссоздан из первоначальный намерение.
Кто-нибудь может объяснить мне, как это возможно и что здесь происходит? Я что-то не понял из Android? Почему это происходит только с несколькими людьми? Что может быть причиной этого? Буду очень признателен даже за малейшее предложение.
Большое спасибо!