2016-05-20 43 views
-1

我有一種方法可以讀取圖像的外部存儲空間。我想將這些圖像存儲在ImageView ArrayList中。要做到這一點,我已經定義了我想要搜索的文件夾,並創建了一個Bitmap變量,該變量被分配了我想要修改爲ImageView的圖像,但.setImageBitmap(saveImage)未分配給我的Imageview對象。.setImageBitmap()爲什麼不將圖像分配給ImageView對象?

下面的代碼:

private ArrayList<ImageView> getData() { 

     ImageView singleImage = null; 
     final ArrayList<ImageView> addImage = new ArrayList<>(); 
     File retrieveImages = new File(Environment.getExternalStoragePublicDirectory(
       Environment.DIRECTORY_PICTURES), "/WordResolver"); 

     for(File countImages : retrieveImages.listFiles()) { 

      if(countImages.isFile() && (countImages.getName().endsWith(".jpg"))) { 

       Bitmap saveImage = BitmapFactory.decodeFile(countImages.getAbsolutePath()); 
       singleImage.setImageBitmap(saveImage); //Fails here 
       addImage.add(singleImage); 
      } 

     } 

     return addImage; 
    } 

這裏的證明,圖像被讀取並存儲在Bitmap對象。

1

及這裏的拋出,即使ImageView的應用圖像被分配一個NPE錯誤的堆棧跟蹤。

3月5日至20日:13:38.220 8641-8641/com.example.aaron.wordresolver E/AndroidRuntime:致命異常:主 工藝:com.example.aaron.wordresolver,PID:8641 的java。 lang.RuntimeException:無法啓動活動ComponentInfo {com.example.aaron.wordresolver/com.example.aaron.wordresolver.PictureGallery}:java.lang.NullPointerException:嘗試調用虛擬方法'void android.widget.ImageView.setImageBitmap( android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2416) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2)上的null對象引用 (android.graphics.Bitmap) 476) at android.app.ActivityThread.-wrap11(ActivityThread.java) at android.app.ActivityThread $ H.handleMessage(ActivityThread.java:1344) at android.os.Handler.dispatchMessage(Handler.java:102 ) at android.os.Looper.loop(Looper.java:148) at android.app.ActivityThread.main(ActivityThread.java:5417) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:726) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616) 引起:java.lang.NullPointe rException:嘗試在空對象引用 上的com.example.aaron.wordresolver.PictureGallery.getData(PictureGallery.java:78) 上調用虛擬方法'void android.widget.ImageView.setImageBitmap(android.graphics.Bitmap)' at android.app.Activity.performCreate(Activity.java:6237) at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1107) )在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2369) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2476) at android.app.ActivityThrea在android.os.Handler.dispatchMessage(Handler.java:102) at android.os.Looper()。 .loop(Looper.java:148) at android.app.ActivityThread.main(ActivityThread.java:5417) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os。ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:726) 在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)

+2

您沒有將任何imageview分配給「singleImage」,這就是爲什麼它是空的。 –

+0

是'singleImage.setImageBitmap(saveImage);'沒有給ImageView分配一個_bitmap_從而給它一個值? – COYG

+0

@COYG:do this like singleImage =(ImageView)view.findViewById(R.id.your_imageview); –

回答

1

singleImage不正確初始化,將其指定爲空是不夠的。

初始化singleImage在OnCreate()

singleImage = (ImageView)findViewById(R.id.image); 

刪除:

ImageView singleImage = null; 

和運行getData()初始化後。

+0

此imageview將存儲來自外部存儲器的圖像。因此我無法用'findViewById(R.id.image)'來初始化它;' – COYG

+0

ImageView是連接到屏幕布局的容器。如果你不想在屏幕上使用View,你仍然需要初始化它。只需使用Context構造函數初始化它ImageView singleImage = new ImageView(context); – Shadwork

相關問題