11-09 10:33:11.589 1455 3266 E AndroidRuntime: java.lang.AssertionError
11-09 10:33:11.589 1455 3266 E AndroidRuntime: at com.android.gallery3d.common.Utils.assertTrue(Utils.java:53)
11-09 10:33:11.589 1455 3266 E AndroidRuntime: at com.android.gallery3d.gadget.LocalPhotoSource.isContentSound(LocalPhotoSource.java:164)11-09 10:33:11.589 1455 3266 E AndroidRuntime: at com.android.gallery3d.gadget.LocalPhotoSource.reload(LocalPhotoSource.java:178)
11-09 10:33:11.589 1455 3266 E AndroidRuntime: at com.android.gallery3d.gadget.WidgetService$PhotoRVFactory.onDataSetChanged(WidgetService.java:212)
11-09 10:33:11.589 1455 3266 E AndroidRuntime: at android.widget.RemoteViewsService$RemoteViewsFactoryAdapter.onDataSetChanged(RemoteViewsService.java:142)
11-09 10:33:11.589 1455 3266 E AndroidRuntime: at com.android.internal.widget.IRemoteViewsFactory$Stub.onTransact(IRemoteViewsFactory.java:49)
11-09 10:33:11.589 1455 3266 E AndroidRuntime: at android.os.Binder.execTransact(Binder.java:338)
11-09 10:33:11.589 1455 3266 E AndroidRuntime: at dalvik.system.NativeStart.run(Native Method)
11-09 10:33:11.589 1455 3266 E AndroidRuntime: *** EXCEPTION IN APPLICATION PROCESS.
11-09 10:33:11.591 1455 3266 E AndroidRuntime: java.lang.AssertionError
11-09 10:33:11.591 1455 3266 E AndroidRuntime: at com.android.gallery3d.common.Utils.assertTrue(Utils.java:53)
11-09 10:33:11.591 1455 3266 E AndroidRuntime: at com.android.gallery3d.gadget.LocalPhotoSource.isContentSound(LocalPhotoSource.java:164)
11-09 10:33:11.591 1455 3266 E AndroidRuntime: at com.android.gallery3d.gadget.LocalPhotoSource.reload(LocalPhotoSource.java:178)
11-09 10:33:11.591 1455 3266 E AndroidRuntime: at com.android.gallery3d.gadget.WidgetService$PhotoRVFactory.onDataSetChanged(WidgetService.java:212)
11-09 10:33:11.591 1455 3266 E AndroidRuntime: at android.widget.RemoteViewsService$RemoteViewsFactoryAdapter.onDataSetChanged(RemoteViewsService.java:142)
11-09 10:33:11.591 1455 3266 E AndroidRuntime: at com.android.internal.widget.IRemoteViewsFactory$Stub.onTransact(IRemoteViewsFactory.java:49)
11-09 10:33:11.591 1455 3266 E AndroidRuntime: at android.os.Binder.execTransact(Binder.java:338)
11-09 10:33:11.591 1455 3266 E AndroidRuntime: at dalvik.system.NativeStart.run(Native Method)
分析:
assertTrue()方法本身会抛出一个error,但外层的调用者LocalPhotoSource并没有catch这个异常导致问题出现.
// Throws AssertionError if the input is false.
public static void assertTrue(boolean cond) {
if (!cond) {
throw new AssertionError();
}
}
src/com/android/gallery3d/gadget/LocalPhotoSource.java
private boolean isContentSound(int totalCount) {
if ( mPhotos.size() < Math. min(totalCount, MAX_PHOTO_COUNT)) return false ;
if ( mPhotos.size() == 0) return true ; // totalCount is also 0
StringBuilder builder = new StringBuilder();
for (Long imageId : mPhotos) {
if (builder.length() > 0) builder.append( ",");
builder.append(imageId);
}
Cursor cursor = mContext.getContentResolver().query(
CONTENT_URI, COUNT_PROJECTION ,
String. format("%s in (%s)", Media. _ID, builder.toString()),
null, null);
if (cursor == null) return false ;
try {
Utils. assertTrue(cursor.moveToNext());
return cursor.getInt(0) == mPhotos .size();
//Vinky.Q.Wang added start
} catch(AssertionError assertionError){
return false ;
//Vinky.Q.Wang added end
} finally {
cursor.close();
}
}