3

사용자가 미디어 갤러리에서 이미지를 선택하거나 카메라로 이미지를 가져올 수있는 활동에 nostra13/ImageLoader (https://github.com/nostra13/Android-Universal-Image-Loader)를 사용하려고합니다. 이 작업이 완료되면 그림의 전체 경로가 "/mnt/sdcard/DCIM/100ANDRO/whatever.jpg"로 표시됩니다. 즉, sdcard에 저장된 이미지입니다. 나는 다음과 같은 오류 얻을하여 ImageLoader에이 이미지를로드 할 때 : 정말 오류를 이해하고 있지 않다ImageLoader로 로컬 이미지를로드하려고 할 때 NullPointerException이 발생했습니다.

11-12 16:05:18.966: E/ImageLoader(12905): null
11-12 16:05:18.966: E/ImageLoader(12905): java.lang.NullPointerException
11-12 16:05:18.966: E/ImageLoader(12905): at com.nostra13.universalimageloader.core.LoadAndDisplayImageTask.saveImageOnDisc(LoadAndDisplayImageTask.java:239)
11-12 16:05:18.966: E/ImageLoader(12905): at com.nostra13.universalimageloader.core.LoadAndDisplayImageTask.tryLoadBitmap(LoadAndDisplayImageTask.java:138)
11-12 16:05:18.966: E/ImageLoader(12905): at com.nostra13.universalimageloader.core.LoadAndDisplayImageTask.run(LoadAndDisplayImageTask.java:72)
11-12 16:05:18.966: E/ImageLoader(12905): at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:444)
11-12 16:05:18.966: E/ImageLoader(12905): at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:306)
11-12 16:05:18.966: E/ImageLoader(12905): at java.util.concurrent.FutureTask.run(FutureTask.java:138)
11-12 16:05:18.966: E/ImageLoader(12905): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1088)
11-12 16:05:18.966: E/ImageLoader(12905): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:581)
11-12 16:05:18.966: E/ImageLoader(12905): at java.lang.Thread.run(Thread.java:1019)

을, 이미지의 경로 I가 노력하고있어 이미지보기도 null가 아닌 이미지를로드하십시오. 매니페스트에 필요한 사용 권한이 있으며 원격 이미지는로드 할 수 있지만 로컬 이미지는로드 할 수 없습니다. 무슨 일이 일어날 지에 대한 아이디어가 있습니까?

미리 감사드립니다.

ImageView m_ivAvatar = (ImageView) findViewById(R.id.pdi_image_detail); 
imageLoader.displayImage(imagen.getUrl(), m_ivAvatar); 

하고 XML :

<RelativeLayout 
     android:id="@+id/pdi_header_detail" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content"> 

    <ImageView 
     android:id="@+id/pdi_image_detail" 
     android:layout_width="80dp" 
     android:layout_height="80dp" 
     android:scaleType="fitCenter" 
     android:layout_alignParentTop="true" 
     android:layout_alignParentLeft="true"/> 

    <RelativeLayout 
     android:id="@+id/pdi_detail_action_icons_container" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignParentRight="true" 
     android:layout_centerVertical="true"> 

     <ImageButton 
      android:id="@+id/pdi_detail_icon_share" 
      android:layout_width="30dp" 
      android:layout_height="30dp" 
      android:scaleType="fitCenter" 
      android:layout_alignParentTop="true" 
      android:layout_alignParentLeft="true"/> 

     <ImageButton 
      android:id="@+id/pdi_detail_icon_map" 
      android:layout_width="30dp" 
      android:layout_height="30dp" 
      android:scaleType="fitCenter" 
      android:layout_below="@id/pdi_detalle_icon_share" 
      android:layout_alignParentLeft="true"/> 

    </RelativeLayout> 

</RelativeLayout> 
+0

무엇이 imagen입니까? imagen.getURL()이 반환하는 것은 무엇입니까? – ariefbayu

+0

죄송합니다. imagen은 응용 프로그램 내부의 이미지를 나타내는 객체입니다. 여기에는 getURL() 메소드에서 반환되는 url (이미지의 전체 경로)을 비롯한 몇 가지 정보가 들어 있습니다. 이 URL은 로컬 경로 /mnt/sdcard/.../image.jpg 또는 원격 http : //.../image.jpg가 될 수 있습니다. – sparragol

답변

2

로컬 파일 경로

imageLoader = ImageLoader.getInstance(); 
DisplayImageOptions defaultOptions = new DisplayImageOptions.Builder() 
.cacheInMemory() 
.cacheOnDisc() 
.showImageForEmptyUri(R.drawable.image_broken) 
.build(); 
ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder(this) 
.memoryCache(new WeakMemoryCache()) 
.threadPoolSize(4) 
.defaultDisplayImageOptions(defaultOptions) 
.build(); 
imageLoader.init(config); 

이 내가 이미지 뷰에 이미지를로드 할 방법은 다음과 같습니다

내 구성입니다 ImageLoader는 파일로 시작해야합니다 : //. 예. 파일 : /// mnt/sdcard/...

+0

고맙습니다. 부끄러운 줄 알고, file : //을 로컬 경로에 추가하는 것에 대해 생각하지 않았습니다. – sparragol

+0

Readme 및 Java 문서를 읽어야합니다. – NOSTRA