所以我有一個老問題:代碼工作正常,而不應該。任何人都能猜到它怎麼可能?這個SimpleCursorAdapter如何工作正常?
我正在顯示聯繫人列表,每個聯繫人都有照片縮略圖。返回的遊標數據沒有任何照片縮略圖數據,但每個聯繫人的縮略圖都正確顯示。
列表項的看法:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_height="match_parent"
android:layout_width="match_parent"
android:orientation="horizontal"
>
<ImageView
android:id="@+id/userpic"
android:layout_width="150dp"
android:layout_height="150dp"
android:contentDescription="Userpic"
/>
<TextView
android:id="@android:id/text1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
android:clickable="true"
android:textSize="24sp"
android:padding="12dp"
android:layout_gravity="center_vertical"
/>
</LinearLayout>
的主要代碼創建光標
private static class CursorAdapter extends SimpleCursorAdapter {
private static final String[] FROM = new String[]{
Contacts.DISPLAY_NAME_PRIMARY,
Contacts.PHOTO_THUMBNAIL_URI
};
private static final int[] TO = new int[]{
android.R.id.text1,
R.id.userpic
};
public CursorAdapter(Activity activity, Cursor c) {
super(activity, R.layout.contacts_item, c, FROM, TO, 0);
}
@Override
public View newView(Context context, Cursor cursor, ViewGroup parent) {
// Here I logged cursor contents and am sure that thumbnail column data is null.
dumpCursorCurrent(cursor);
View view = super.newView(context, cursor, parent);
int columnIndex = cursor.getColumnIndexOrThrow(Contacts.PHOTO_THUMBNAIL_URI);
String thumbnailUriString = cursor.getString(columnIndex);
if (thumbnailUriString != null) {
throw new RuntimeException("Never comes here");
}
return view;
}
}
代碼:
ContentResolver contentResolver = getActivity().getContentResolver();
Cursor c = contentResolver.query(
Contacts.CONTENT_URI,
projection,
null,
null,
null
);
所以列表中有適當照片有每個接觸照片。
我調試SimpleCursorAdapter代碼,它不應該工作,它調用imageView.setImageURI(Uri.parse(""))
,自然記錄的每一行警告:
1月9日至3日:47:20.023 27814-27814/me.lazerka .mf.android E/BitmapFactory: 無法解碼碼流:java.io.FileNotFoundException:/:開放 失敗:EISDIR(是一個目錄)1月9日至3日:47:20.023
27814-27814 /我。 lazerka.mf.android I/System.out:resolveUri失敗 錯誤的位圖uri:
那麼,誰爲每個ImageView設置了正確的imageURI,它在哪裏需要它(遊標始終爲空)?
你確定光標到處都是空嗎?試過DatabaseUtils.dumpCursor()? – pskink 2014-09-03 09:04:31
感謝'DatabaseUtils'建議,它顯示確實沒有空值。竅門是在'CursorAdapter#getView()' - 我有一個項目與空照片,我添加一個項目與非空照片。但在getView()中_reused_現有的視圖,而不調用newView()我把我的斷點。所以它正在調用newView來與我以前已經有過的空照片進行聯繫。 如果您關心積分,請隨時發佈答案,我會接受,謝謝。 – 2014-09-04 04:43:24
很高興聽到它現在的作品 – pskink 2014-09-04 05:11:53