java catch getm_使用try-catch无法捕获Java(Android)异常

我是

Java(

Android)初学者(来自Python),我正在尝试使用Try-Catch捕获异常,如下所示:

try {

u.save();

} catch (Exception e) {

Log.wtf("DO THIS", " WHEN SAVE() FAILS");

}

令我惊讶的是,我没有看到我的日志消息,但我仍然收到以下错误:

09-25 10:53:32.147: E/SQLiteDatabase(7991):

android.database.sqlite.SQLiteConstraintException: error code 19:

constraint failed

为什么不赶上例外?我在这里做错了吗?欢迎所有提示!

save()方法如下所示:

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);

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值