그래서 사용자가 사진을 찍어 로컬에 저장할 수있는 응용 프로그램이 있습니다. 이미지 이름은 나중에 참조 할 수 있도록 내 SQLite 데이터베이스에 저장됩니다. 지금은 비트 맵 이미지를 이미지 뷰로 설정하는 문제를 추적했습니다. 여기에 내 코드입니다 :Android Dev : ViewBinder를 통해 SQLite 데이터베이스에서 참조되는 ListView에 로컬 이미지 파일 삽입
private void displayListView() {
// TODO Auto-generated method stub
Cursor cursor = info.getListData();
String[] listViewColumns = new String[] { Database.KEY_BREWNAME, Database.KEY_BREWERY, Database.KEY_RATING,
Database.KEY_DATEIMAGENAME, };
int[] dataToListView = new int[] { R.id.tvBrewName, R.id.tvBrewery, R.id.tvRating, R.id.ivThumb, };
dataAdapter = new SimpleCursorAdapter(this, R.layout.entrymain, cursor, listViewColumns, dataToListView, 0);
ViewBinder viewBinder = new ViewBinder() {
public boolean setViewValue(View view, Cursor cursor, int columnIndex) {
ImageView image = (ImageView)view;
Log.w(TAG, "******************List Image loaded == " + columnIndex + " **********************");
try {
FileInputStream fis = openFileInput(cursor.getString(columnIndex));
fis.close();
Log.w(TAG, "******************List Image loaded == fis.close **********************");
image.setImageBitmap(BitmapFactory.decodeStream(fis));
Log.w(TAG, "******************List Image loaded == setimage success **********************");
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return true;
};
};
ImageView image = (ImageView)findViewById(R.id.ivThumb);
viewBinder.setViewValue(image, cursor, cursor.getColumnIndex("date_image_name"));
dataAdapter.setViewBinder(viewBinder);
listview.setAdapter(dataAdapter);
이 코드는 내가 image.setImageBitmap에 문제를 추적 ViewBinder 밖으로 및 log.w 년대를 사용하여 잘 작동 (BitmapFactory.decodeStream (FIS))와 나는 아주 이해가 안 돼요 왜이 코드를 사용했는지에 따라 이미지를 설정하지 않을 것입니다. 왜 설정되지 않는지에 대한 아이디어는 java.io.IOException과 관련이 있다는 것을 알았습니다 : 읽기 실패 : EBADF (잘못된 파일 번호) 그러나 어떻게 해결합니까? 미리 감사드립니다! 당신은 폐쇄 InputStream
에서 비트 맵을 디코딩하려고
03-18 10:44:16.281: D/ActivityThread(19380): setTargetHeapUtilization:0.25
03-18 10:44:16.281: D/ActivityThread(19380): setTargetHeapIdealFree:8388608
03-18 10:44:16.281: D/ActivityThread(19380): setTargetHeapConcurrentStart:2097152
03-18 10:44:16.782: I/Adreno200-EGLSUB(19380): <ConfigWindowMatch:2087>: Format RGBA_8888.
03-18 10:44:16.792: E/(19380): <s3dReadConfigFile:75>: Can't open file for reading
03-18 10:44:16.792: E/(19380): <s3dReadConfigFile:75>: Can't open file for reading
03-18 10:44:17.112: D/AbsListView(19380): Get MotionRecognitionManager
03-18 10:44:17.152: W/Start(19380): ******************List Image loaded == 4 **********************
03-18 10:44:17.162: W/Start(19380): ******************List Image loaded == fis.close **********************
03-18 10:44:17.162: W/System.err(19380): java.io.IOException: read failed: EBADF (Bad file number)
03-18 10:44:17.172: W/System.err(19380): at libcore.io.IoBridge.read(IoBridge.java:442)
03-18 10:44:17.172: W/System.err(19380): at java.io.FileInputStream.read(FileInputStream.java:179)
03-18 10:44:17.172: W/System.err(19380): at java.io.BufferedInputStream.fillbuf(BufferedInputStream.java:168)
03-18 10:44:17.172: W/System.err(19380): at java.io.BufferedInputStream.read(BufferedInputStream.java:309)
03-18 10:44:17.172: W/System.err(19380): at android.graphics.BitmapFactory.nativeDecodeStream(Native Method)
03-18 10:44:17.172: W/System.err(19380): at android.graphics.BitmapFactory.decodeStream(BitmapFactory.java:619)
03-18 10:44:17.172: W/System.err(19380): at android.graphics.BitmapFactory.decodeStream(BitmapFactory.java:691)
03-18 10:44:17.172: W/System.err(19380): at com.ex.beerlog.Start$1.setViewValue(Start.java:78)
03-18 10:44:17.172: W/System.err(19380): at com.ex.beerlog.Start.displayListView(Start.java:91)
03-18 10:44:17.172: W/System.err(19380): at com.ex.beerlog.Start.onCreate(Start.java:56)
03-18 10:44:17.172: W/System.err(19380): at android.app.Activity.performCreate(Activity.java:5048)
03-18 10:44:17.172: W/System.err(19380): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1094)
03-18 10:44:17.172: W/System.err(19380): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2052)
03-18 10:44:17.172: W/System.err(19380): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2113)
03-18 10:44:17.182: W/System.err(19380): at android.app.ActivityThread.access$700(ActivityThread.java:139)
03-18 10:44:17.182: W/System.err(19380): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1224)
03-18 10:44:17.182: W/System.err(19380): at android.os.Handler.dispatchMessage(Handler.java:99)
03-18 10:44:17.182: W/System.err(19380): at android.os.Looper.loop(Looper.java:137)
03-18 10:44:17.182: W/System.err(19380): at android.app.ActivityThread.main(ActivityThread.java:4918)
03-18 10:44:17.182: W/System.err(19380): at java.lang.reflect.Method.invokeNative(Native Method)
03-18 10:44:17.182: W/System.err(19380): at java.lang.reflect.Method.invoke(Method.java:511)
03-18 10:44:17.182: W/System.err(19380): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1004)
03-18 10:44:17.182: W/System.err(19380): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:771)
03-18 10:44:17.182: W/System.err(19380): at dalvik.system.NativeStart.main(Native Method)
03-18 10:44:17.182: W/System.err(19380): Caused by: libcore.io.ErrnoException: read failed: EBADF (Bad file number)
03-18 10:44:17.182: W/System.err(19380): at libcore.io.Posix.readBytes(Native Method)
03-18 10:44:17.182: W/System.err(19380): at libcore.io.Posix.read(Posix.java:118)
03-18 10:44:17.182: W/System.err(19380): at libcore.io.BlockGuardOs.read(BlockGuardOs.java:149)
03-18 10:44:17.182: W/System.err(19380): at libcore.io.IoBridge.read(IoBridge.java:432)
03-18 10:44:17.182: W/System.err(19380): ... 23 more
+1 InputStream을 닫을 필요가없는 첫 번째 .. –
그게 내가 마침내 내가 뭘 잘못하고 있었는지 물어 보았고, 다른 사람들과 나의 FileInputStream을 닫는 것과 같은 것이었다. 대단히 고마워요.이게 정말 나를 미치게 만들었어요! –
마지막 것 당신이 저를 응답하게 꺼리지 않는 경우에. 'if (if (view instanceof ImageView) || view.getId()! = R.id.ivThumb)'as "문자열보기가 instanceof Imageview가 아니거나 뷰 문자열의 ID가 아닌 경우 r.is.ivThumb then then .... "|| 의미 또는 자바 올바른가요? –