2016-05-20 44 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

相关问题