Ive den folgenden Code in einer Klasse bekam UserRepository
genannt, dass löst eine Ausnahme:Java-Ausnahme wird nicht abgefangen?
public void addUser(final User user) throws IllegalArgumentException {
final String encodedUserId = Email.encodeID(user.getEmail().getAddress());
firebaseUsersRef.child(encodedUserId).addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot snapshot) {
if (snapshot.exists()) {
throw new IllegalArgumentException(USER_ALREADY_EXISTS);
} else {
Firebase firebaseUserReference = firebaseRef.child(USERS_TABLE).child(encodedUserId);
firebaseUserReference.setValue(user);
}
}
@Override
public void onCancelled(FirebaseError firebaseError) {
throw new IllegalArgumentException(FIREBASE_ERROR);
}
});
}
ich es in RegisterActivity.java
verwende, wie folgt aus:
public void saveUser(){
saveUserToDb();
}
private void saveUser(User user) {
boolean savedUser = false;
try {
userRepository.addUser(user);
savedUser = true;
} catch (IllegalArgumentException iae) {
if (iae.getMessage().equals(UserRepository.USER_ALREADY_EXISTS)) {
showToast(getResources().getString(R.string.user_already_exists));
} else if (iae.getMessage().equals(UserRepository.FIREBASE_ERROR)) {
showToast(getResources().getString(R.string.firebase_error));
}
} finally {
if (savedUser) {
showToast(getResources().getString(R.string.new_user_created));
}
}
}
Ich fangen die Ausnahme So wenn es passiert. Aus irgendeinem Grund wird die Ausnahme jedoch nicht abgefangen.
Irgendwelche Hinweise?
Danke.
EDIT:
Heres meine Stacktrace:
04-27 09:56:34.984 4741-4741/app E/AndroidRuntime: FATAL EXCEPTION: main
Process: app, PID: 4741
java.lang.IllegalArgumentException: User already exists
at app.repository.UserRepository$1.onDataChange(UserRepository.java:33)
at com.firebase.client.Query$1.onDataChange(Query.java:144)
at com.firebase.client.core.ValueEventRegistration.fireEvent(ValueEventRegistration.java:56)
at com.firebase.client.core.view.DataEvent.fire(DataEvent.java:45)
at com.firebase.client.core.view.EventRaiser$1.run(EventRaiser.java:38)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:148)
at android.app.ActivityThread.main(ActivityThread.java:5417)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
04-27 09:57:39.773 4741-4747/app W/art: Suspending all threads took: 6.473ms
Ändern von IllegalArgumentException in Throwable –
Ich habe es auch versucht, aber es hat nicht funktioniert –
Haben Sie versucht, Ihre addUser-Methode zu debuggen? –