I have created a small XML parsing application for Android that
displays information in a listview and then allows a user to click on
the list view and a dialog with further info will pop up.
The problem is that when the screen orientation is changed when a
dialog screen is open I get a null pointer error.
The null pointer occurs on the following line:
---
if(setting.getAddForPublicUserNames() == 1){
---
This line is part of my dialogPrepare method:
---
@Override
public void onPrepareDialog(int id, Dialog dialog) {
switch(id) {
case (SETTINGS_DIALOG) :
afpunText = "";
if(setting.getAddForPublicUserNames() == 1){
afpunText = "Yes";
}
else{
afpunText = "No";
}
String Text = "Login Settings: " + "\n"
+ "Password: " + setting.getPassword() +
"\n"
+ "Server: " + setting.getServerAddress() +
"\n"
+ "Register: " +
setting.getRegistrarAddress() + "\n"
+ "Realm: " + setting.getRealm() + "\n"
+ "Public UserNames: " + afpunText + "\n"
+ "Preference Settings: " + "\n"
+ "Request VDN: " +
setting.getRequestVDN() + "\n"
+ "Handover Settings: " + "\n"
+ "Enable Handover: " +
setting.getEnableHandover() +
"\n"
+ "Hand Over Number: " +
setting.getHandoverNum() +
"\n";
AlertDialog settingsDialog = (AlertDialog)dialog;
settingsDialog.setTitle("Auth ID: " + setting.getUserName());
tv =
(TextView)settingsDialog.findViewById(R.id.detailsTextView);
if (tv != null)
tv.setText(Text);
break;
}
}
---
So the error is that my variable setting is null after the screen
orientation changes.
I have tried to use the onSaveInstance state methods to fix that as
follows:
---
@Override
public void onSaveInstanceState(Bundle savedInstanceState) {
for(int i = 0; i < settings.size(); i++){
savedInstanceState.putString("Username"+i,
settings.get(i).getUserName());
savedInstanceState.putString("Password"+i,
settings.get(i).getPassword());
savedInstanceState.putString("Server"+i,
settings.get(i).getServerAddress());
savedInstanceState.putString("Registrar"+i,
settings.get(i).getRegistrarAddress());
savedInstanceState.putString("Realm"+i,
settings.get(i).getRealm());
savedInstanceState.putInt("PUserNames"+i,
settings.get(i).getAddForPublicUserNames());
savedInstanceState.putString("RequestVDN"+i,
settings.get(i).getRequestVDN());
savedInstanceState.putString("EnableHandOver"+i,
settings.get(i).getEnableHandover());
savedInstanceState.putString("HandOverNum"+i,
settings.get(i).getHandoverNum());
}
super.onSaveInstanceState(savedInstanceState);
}
---
and
---
@Override
public void onRestoreInstanceState(Bundle savedInstanceState) {
super.onRestoreInstanceState(savedInstanceState);
//Check to see if this is required
// Restore UI state from the savedInstanceState.
// This bundle has also been passed to onCreate.
for(int i = 0; i<settings.size(); i++){
settings.get(i).setUserName(savedInstanceState.getString("Username"+i));
settings.get(i).setPassword(savedInstanceState.getString("Password"+i)) ;
settings.get(i).setServerAddress(savedInstanceState.getString("Server"+i));
settings.get(i).setRegistrarAddress(savedInstanceState.getString("Registrar"+i));
settings.get(i).setRealm(savedInstanceState.getString("Realm"+i));
settings.get(i).setAddForPublicUserNames(savedInstanceState.getInt("PUserNames"+i));
settings.get(i).setRequestVDN(savedInstanceState.getString("RequestVDN"+i));
settings.get(i).setEnableHandover(savedInstanceState.getString("EnableHandOver"+i));
settings.get(i).setHandoverNum(savedInstanceState.getString("HandOverNum"+i));
}
}
---
However the error still remains, I think I have to save the selected
setting from what was selected from the ListView? But how do I save a
setting object in onSavedInstance?
--
You received this message because you are subscribed to the Google
Groups "Android Developers" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/android-developers?hl=en