Ne peut pas attraper Java (Android), à l'Exception try-catch

Je suis un Java (Android) débutant (venant de Python) et je suis en train d'essayer d'attraper une exception à l'aide de Try-Catch comme suit:

try {
    u.save();
} catch (Exception e) {
    Log.wtf("DO THIS", " WHEN SAVE() FAILS");
}

À ma grande surprise, je ne vois pas mon message de Log, mais j'ai toujours l'erreur suivante:

09-25 10:53:32.147: E/SQLiteDatabase(7991):
android.la base de données.sqlite.SQLiteConstraintException: erreur code 19:
contrainte échoué

Pourquoi ne pas intercepter l'Exception? Suis-je en train de faire quelque chose de mal ici? Tous les conseils sont les bienvenus!

La méthode save() se présente comme suit:

public final void save() {
final SQLiteDatabase db = Cache.openDatabase();
final ContentValues values = new ContentValues();
for (Field field : mTableInfo.getFields()) {
final String fieldName = mTableInfo.getColumnName(field);
Class<?> fieldType = field.getType();
field.setAccessible(true);
try {
Object value = field.get(this);
if (value != null) {
final TypeSerializer typeSerializer = Cache.getParserForType(fieldType);
if (typeSerializer != null) {
//serialize data
value = typeSerializer.serialize(value);
//set new object type
if (value != null) {
fieldType = value.getClass();
//check that the serializer returned what it promised
if (!fieldType.equals(typeSerializer.getSerializedType())) {
Log.w(String.format("TypeSerializer returned wrong type: expected a %s but got a %s",
typeSerializer.getSerializedType(), fieldType));
}
}
}
}
//TODO: Find a smarter way to do this? This if block is necessary because we
//can't know the type until runtime.
if (value == null) {
values.putNull(fieldName);
}
else if (fieldType.equals(Byte.class) || fieldType.equals(byte.class)) {
values.put(fieldName, (Byte) value);
}
else if (fieldType.equals(Short.class) || fieldType.equals(short.class)) {
values.put(fieldName, (Short) value);
}
else if (fieldType.equals(Integer.class) || fieldType.equals(int.class)) {
values.put(fieldName, (Integer) value);
}
else if (fieldType.equals(Long.class) || fieldType.equals(long.class)) {
values.put(fieldName, (Long) value);
}
else if (fieldType.equals(Float.class) || fieldType.equals(float.class)) {
values.put(fieldName, (Float) value);
}
else if (fieldType.equals(Double.class) || fieldType.equals(double.class)) {
values.put(fieldName, (Double) value);
}
else if (fieldType.equals(Boolean.class) || fieldType.equals(boolean.class)) {
values.put(fieldName, (Boolean) value);
}
else if (fieldType.equals(Character.class) || fieldType.equals(char.class)) {
values.put(fieldName, value.toString());
}
else if (fieldType.equals(String.class)) {
values.put(fieldName, value.toString());
}
else if (fieldType.equals(Byte[].class) || fieldType.equals(byte[].class)) {
values.put(fieldName, (byte[]) value);
}
else if (ReflectionUtils.isModel(fieldType)) {
values.put(fieldName, ((Model) value).getId());
}
else if (ReflectionUtils.isSubclassOf(fieldType, Enum.class)) {
values.put(fieldName, ((Enum<?>) value).name());
}
}
catch (IllegalArgumentException e) {
Log.e(e.getClass().getName(), e);
}
catch (IllegalAccessException e) {
Log.e(e.getClass().getName(), e);
}
}
if (mId == null) {
mId = db.insert(mTableInfo.getTableName(), null, values);
}
else {
db.update(mTableInfo.getTableName(), values, "Id=" + mId, null);
}
Cache.getContext().getContentResolver()
.notifyChange(ContentProvider.createUri(mTableInfo.getType(), mId), null);
}
Avez-vous vu votre message de log?
Non, je ne vois pas le message d'erreur. (ajouté à ma question).
Essayez de remplacer "wtf" avec un "e" - vous devriez alors voir votre message. Il n'y a rien de mal avec votre try/catch. À moins que l'u.méthode save déjà intercepte l'exception et qu'il gère
Pouvez-vous nous montrer le save méthode?
peut-être l'exception est pris à l'intérieur de votre save méthode

OriginalL'auteur kramer65 | 2013-09-25