Ich verwende das automatisch generierte (von Android Studio) SettingsActivity
in meiner App. Ich habe eine Listener
erstellt, um die App nach Preference
Änderungen neu zu starten, aber aus irgendeinem Grund kann ich kein neues Intent
von diesem Listener
starten. HierSo starten Sie eine Absicht in PreferenceChangeListener
ist der Code:
private static Preference.OnPreferenceChangeListener listener = new Preference.OnPreferenceChangeListener(){
@Override
public boolean onPreferenceChange(Preference preference, Object o) {
SettingsActivity settingsActivity = new SettingsActivity();
settingsActivity.restartApp();
return true;
}
};
Und:
private void restartApp() {
Intent intent = new Intent(SettingsActivity.this, MainActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
SettingsActivity.this.finish();
startActivity(intent);
}
Ich hatte eine neue Instanz dieser Klasse zu erstellen, weil ich eine Nicht statische Methode aus einer statischen Methode aufrufen.
wird der Hörer von dieser Methode genannt:
private static void bindPreferenceSummaryToValue(Preference preference) {
// Set the listener to watch for value changes.
preference.setOnPreferenceChangeListener(sBindPreferenceSummaryToValueListener);
preference.setOnPreferenceChangeListener(listener);
// Trigger the listener immediately with the preference's
// current value.
sBindPreferenceSummaryToValueListener.onPreferenceChange(preference,
PreferenceManager
.getDefaultSharedPreferences(preference.getContext())
.getString(preference.getKey(), ""));
}
Und diese Methode von hier genannt wird: Erstellen Sie keine
Process: appinventor.ai_itiel_maimon.Rubiks_cube, PID: 14454
java.lang.NullPointerException: Attempt to invoke virtual method 'android.app.ActivityThread$ApplicationThread android.app.ActivityThread.getApplicationThread()' on a null object reference
at android.app.Activity.startActivityForResult(Activity.java:4283)
at android.app.Activity.startActivityForResult(Activity.java:4230)
at android.app.Activity.startActivity(Activity.java:4567)
at android.app.Activity.startActivity(Activity.java:4535)
at appinventor.ai_itiel_maimon.Rubiks_cube.SettingsActivity.restartApp(SettingsActivity.java:59)
at appinventor.ai_itiel_maimon.Rubiks_cube.SettingsActivity.access$000(SettingsActivity.java:16)
at appinventor.ai_itiel_maimon.Rubiks_cube.SettingsActivity$2.onPreferenceChange(SettingsActivity.java:50)
at android.preference.Preference.callChangeListener(Preference.java:1173)
at android.preference.ListPreference.onDialogClosed(ListPreference.java:282)
at android.preference.DialogPreference.onDismiss(DialogPreference.java:424)
at android.app.Dialog$ListenersHandler.handleMessage(Dialog.java:1533)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:158)
at android.app.ActivityThread.main(ActivityThread.java:7229)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1230)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120)
anzurufen Ich versuchte, die App-Neustartmethode statisch zu machen, aber wie kann ich einen Kontextparameter verwenden? –
Ich würde mit dem Entfernen der 'static' aus dem' onPreferenceChangesListener' gehen – Muzikant
Und ich kann den Listener nicht zu statisch ändern, weil es von einer statischen Methode aufgerufen wird, die statisch sein muss. –