我有一个堆栈跟踪说非法状态异常:
java.lang.IllegalStateException:无法初始化游标窗口 在android.database.CursorWindow.native_init(本机方法) 在android.database.CursorWindow。(CursorWindow.java:63) 在android.database.CursorWindow。(CursorWindow.java:80) 在android.content.ContentProviderProxy.query(ContentProviderNative.java:437) 在android.content.ContentResolver.query(ContentResolver.java:264) 在android.provider.MediaStore $ InternalThumbnails.getThumbnail(MediaStore.java:387) 在android.provider.MediaStore $ Images $ Thumbnails.getThumbnail(MediaStore.java:788) at com.topicshow.threading.ImageThread.loadingImageFromID(ImageThread.java:56) 在com.topicshow.threading.ImageThread.run(ImageThread.java:52)
函数loadingImageFromID是我的处理程序类中的一个函数,我的线程将sendMessage发送到处理程序,处理程序将调用此函数。
private void loadingImageFromID () {
Bitmap bitmap = MediaStore.Images.Thumbnails.getThumbnail(
mContext.getContentResolver(),
mNativeID,
MediaStore.Images.Thumbnails.MICRO_KIND,
new Options());
if (!mExpired)
{
ByteArrayOutputStream bos = new ByteArrayOutputStream();
bitmap.compress(CompressFormat.PNG, 0 /*ignored for PNG*/, bos);
byte[] bitmapdata = bos.toByteArray();
Message msg = new Message();
Bundle bundle = new Bundle();
bundle.putByteArray("IMAGE", bitmapdata);
msg.setData(bundle);
这是从mediastore获取图像数据的代码。
public void loadGalleryToAdapter(int width, String bucketID) {
Cursor thumbnailCursor = MediaStore.Images.Media.query(getContext().getContentResolver(), MediaStore.Images.Media.EXTERNAL_CONTENT_URI,
new String [] {
MediaStore.Images.Media._ID,
MediaStore.Images.ImageColumns.DATE_ADDED
},
MediaStore.Images.ImageColumns.BUCKET_ID + " IN (" + bucketID + ")",
null,
MediaStore.Images.ImageColumns.DATE_ADDED + " DESC"
);
GalleryCursorAdapter adapter = new GalleryCursorAdapter(getContext(), thumbnailCursor, width);
setAdapter(adapter);
}
有谁知道发生了什么事。 loadGalleryToAdapter我不确定它是起点,因为stacktrace没有那个信息....线程是在适配器中执行的。