【问题标题】:Android ImageView SDCardAndroid ImageView SDCard
【发布时间】:2011-12-24 01:44:27
【问题描述】:

我正在尝试将 /mnt/sdcard/image.jpg 中的图像文件读入我的 ImageView。这是我的代码:

Bitmap bmp = BitmapFactory.decodeFile("/mnt/sdcard/image.jpg");     
webImage.setImageBitmap(bmp);

我有写外部存储权限。

我的代码说 bmp 为空,即使图像位于根目录中(我转到 I Drive 并且 image.jpg 在那里。)

我做错了什么?

【问题讨论】:

    标签: android imageview


    【解决方案1】:

    可能有两种情况:

    1) 如果你的图片在sdcard的根目录下,那么可以通过

     Environment.getExternalStorageDirectory().toString + File.separator + "yourimage.jpg"
    

    2)但我想在你的情况下它在 /mnt/sdcard/external_sd 中,在这种情况下你的设备的存储卡试试这个:

    Environment.getExternalStorageDirectory().toString + File.separator + "external_sd"  + File.separator + "yourimage.jpg"
    

    BitmapFactory.decodeFile("Replace Here...")中的以上两条路径替换为你的路径

    【讨论】:

      【解决方案2】:

      我怀疑带有图像的卡没有安装在 /mnt/sdcard/ 下。

      由于您使用的是摩托罗拉设备,您可能有两个大容量存储设备(请参阅this list,如果您的设备在其中,就是这种情况)。在这种情况下,您必须使用Motorola "External" Storage API 来获取您的第二个大容量存储的路径。

      一般情况下:您不能像这样依赖 SD 卡的硬编码路径。挂载点因设备而异。或者可能有不同的命名,某些设备可能有闪存而不是卡,等等。简而言之:在你的手机上有效的东西会影响其他人。您可以通过调用Environment.getExternalStorageDirectory() 来读取到主外部存储的可靠路径。

      【讨论】:

        【解决方案3】:

        谢谢,我设法解决了。这是我发现的:

        1. 我去了项目>清理
        2. 我断开了手机与计算机的连接。连接后,SD 已挂载,您无法查看数据。
        3. 图像名称不能以数字开头。我正在使用 SDK 7。
        4. 我查看了 LogCat 并没有收到任何错误,但是,保存到其他系统区域(如 /Android/Data/)导致 FileNotFoundException - 权限错误。

          File destination = new File(Environment.getExternalStorageDirectory(), "image" + 
          DateHelper.getTodaysDate() + "_" + DateHelper.getCurrentTime() + ".jpg");
          
          private View.OnClickListener listener = new View.OnClickListener() {
            @Override
            public void onClick(View v) {
              Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
              // Add extra to save full-image somewhere
              intent.putExtra(MediaStore.EXTRA_OUTPUT,
            Uri.fromFile(destination));
              startActivityForResult(intent, REQUEST_IMAGE);
            }
          };
          

        【讨论】:

          【解决方案4】:

          请查看您的 LogCat 以获取更多信息。

          我猜你有三星设备。三星往往有一个 external_sd 文件夹,因此您可能将其添加到错误的 sdcard 中,因为三星通常有一个内部和一个外部的。

          【讨论】:

          • 谢谢。我在 Android 2.3 上使用摩托罗拉设备。我正在使用手机本身。我曾尝试将手机与电脑的线断开,因为我认为卡已安装,但我仍然没有运气。我无法使用 LogCat,因为我使用的是实体电话。还有其他想法吗?
          • 您也可以在设备上使用 LogCat。只需确保adb 可以看到您的设备。然后在 Eclipse 中打开设备视图并选择您的应用程序。比您在 LogCat 视图中看到它的输出。如果你不能让它工作(它应该工作!)你仍然可以使用像Log Collector这样的应用程序并通过电子邮件将你的设备日志发送给你自己。
          【解决方案5】:

          您的代码完全没问题。只需检查您是否正在编写正确的 sd 卡路径。可能是因为这个原因你得到了空位图。

          并且“写入外部存储权限”是用于写入您的 sd 卡而不是从 sd 卡读取。明确这个概念。

          【讨论】:

            猜你喜欢
            • 2015-09-27
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2011-09-07
            • 2017-05-29
            • 1970-01-01
            • 2012-03-06
            • 1970-01-01
            相关资源
            最近更新 更多