Ho scritto un'app e ora, dopo il rilascio, alcuni dei miei utenti sembrano avere un bug sgradevole. Uno che sono semplicemente incapace di riprodurre.Android onActivityResult. La variabile membro è talvolta nullo
Coinvolti in questo sono tre attività.
Attività 1: SuperActivity
public abstract class SuperActivity extends Activity
Attività 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);
}
Attività 3: ListDialogActivity
public class ListDialogActivity extends SuperActivity
Quello che sto facendo qui è che avviare il ListDialogActivity da MainActivity per presentare all'utente alcune scelte. Una volta effettuata una selezione, ListDialogActivity imposterà un risultato e quindi terminerà. Nel SuperActivity ho:
onActivityResult(int requestCode, int resultCode, Intent data) {
//if activityRequestCode was ListDialogRequestCode and the Result was RESULT_OK, then call onListDialogClick(..) with the appropriate values.
}
Quindi questo è come viene richiamato l'onListDialogClick() nel mio MainActivity (Così si può solo pensare ad esso come un onActivityResult normale()). Lì, alcuni utenti riscontrano un'eccezione di puntatore nullo perché myMemberVariable è null.
Non riesco a capire cosa sta succedendo qui. Inoltre, sto salvando il mio stato di istanza per gestire le rotazioni del telefono, ma anche se non lo facessi, poiché il onCreate sarebbe stato richiamato, non sarebbe ancora nullo, avrebbe solo perso il suo stato e sarebbe stato ricreato dall'Intent iniziale.
Qualcuno può spiegarmi come è possibile e cosa sta succedendo qui? Ho dimenticato qualcosa da Android? Perché succede solo a poche persone? Quale potrebbe essere la ragione di questo? Sarei davvero grato anche per il più piccolo suggerimento.
Grazie mille!
Qualsiasi fattore comune con i dispositivi su cui si sta verificando? – JRaymond
Non ho ancora trovato un fattore comune (sono sicuro che sia successo a qualcuno con un Galaxy S2 con CM9 ea qualcuno con un HTC uno x.) Ma a parte questo non lo so perché la console di sviluppo non lo fa mostrami i dispositivi dai quali provengono gli errori. – metter
dove è stato inizializzato 'myMemberVariable'? Nel codice posso vedere che deve essere sempre nullo perché è uguale a 'private MyObject myMemberVariable = null;' – zapl