【问题标题】:Retrieve image path from assets folder从资产文件夹中检索图像路径
【发布时间】:2012-05-22 18:25:38
【问题描述】:

我无法从资产文件夹中检索图像路径。

我在资产文件夹中有一个图像文件夹。在文件夹中,我有三个不同的文件夹。

这是我使用的代码:

String IntroImage1= "" + languageSelected + "/" + Intro1ImagePath + ".png" ;


try{
    AssetManager mngr =getAssets();
    InputStream BulletImgInput = mngr.open(IntroImage1);
    //InputStream BulletImgInput = mngr.open("image/Malay/bullet.png");

    Bitmap bitmapBullet = BitmapFactory.decodeStream(BulletImgInput);
    BulletImage.setImageBitmap(bitmapBullet);
    }catch(final IOException e){
    e.printStackTrace();
    }

我想知道为什么我不能显示图像?因为我试图通过这段代码来检索它:

InputStream BulletImgInput = mngr.open("image/Malay/bullet.png");

它确实检索了文件,但我在 mngr.open 中替换的字符串没有显示出来。

真的需要你们帮忙。谢谢。

【问题讨论】:

    标签: android path assets


    【解决方案1】:

    试试这个:

    try {
    
        // get input stream
        InputStream ims = getAssets().open("avatar.jpg");
    
        // load image as Drawable
        Drawable d = Drawable.createFromStream(ims, null);
    
        // set image to ImageView
        mImage.setImageDrawable(d);
    }
    catch(IOException ex) {
    
          Log.e("I/O ERROR","Failed when ..."
    }
    

    你的子弹图像

    【讨论】:

      【解决方案2】:

      您不需要 AssetManager。你可以这样做

      BitmapFactory.decodeFile("file:///android_asset/image/Malay/bullet.jpg")

      虽然将图像存储在资产中并不是最好的方法。您将无法利用 Android 资源管理系统。因此,除非您有令人信服的理由这样做,否则我建议您看看使用 res 文件夹和资源系统。

      更新:说明 BitmapFactory 有一个通过decodeFile 方法解码文件的方法。这是第一点。 Android 允许您通过file:///android_asset/{path} 路径访问assets 文件夹中的文件。在您的情况下,/image/Malay/bullet.jpg 中的图像是 assets 文件夹,可以通过 file:///android_asset/image/Malay/bullet.jpg 访问。

      【讨论】:

      • 是的,我有一定的理由使用资产文件。你能简单地告诉我你提供的代码是如何工作的吗?对不起,我对 android 超级陌生。谢谢
      • 这对我不起作用。我得到一个文件未找到异常。即使我使用BitmapFactory.decodeFile("file:///android_asset/anims/x.gif", options);,logcat 错误也会显示为FileNotFoundException: /file:/android_asset/anims/x.gif。知道问题出在哪里吗?
      【解决方案3】:

      可能是路径的一部分错过了image

      String IntroImage1= "image/" + languageSelected + "/" + Intro1ImagePath + ".png" ;
      

      而不是

      String IntroImage1= "" + languageSelected + "/" + Intro1ImagePath + ".png" ;
      

      更新:同时检查languageSelectedIntro1ImagePath 的值。

      【讨论】:

      • 这是我的目录:assets --> image --->(3 个不同的文件夹,里面有图片)。所以我认为需要包括“”图像/”对吗?
      • @YuenTong 是的,需要包含"image/"。
      • 它对我不起作用。 TT 当我使用此代码时: InputStream BulletImgInput = mngr.open("image/Malay/bullet.png"); ,它可以工作。但不要用不同变量分配的字符串替换 url。我已经尝试通过显示 String IntroImage1= "" + languageSelected + "/" + Intro1ImagePath + ".png" ; 来调试它,并且我得到了与这个 "image/Malay 相同的路径/bullet.png"
      • @YuenTong 我在您的代码中看到您使用ImagePath 变量而不是IntroImage1ImagePath 的值是多少?
      【解决方案4】:
      String url = "file:///android_asset/NewFile.txt";
      
      String url = "file:///android_asset/logo.png";
      

      您可以访问任何文件....

      【讨论】:

      • 但它不是 txt 文件。它是一个 .png 文件。那么还有其他建议吗?
      • @YuenTong 亲爱的你也可以访问png文件
      • 它对我不起作用。 TT 当我使用此代码时: InputStream BulletImgInput = mngr.open("image/Malay/bullet.png"); ,它可以工作。但不要用不同变量分配的字符串替换 url。我已经尝试通过显示 String IntroImage1= "" + languageSelected + "/" + Intro1ImagePath + ".png" ; 来调试它,并且我得到了与这个 "image/Malay 相同的路径/bullet.png"
      【解决方案5】:
      InputStream BulletImgInput = mngr.open("file:///android_asset/image/Malay/bullet.png");
      

      也许这对你有用。

      【讨论】:

      • 它对我不起作用。 TT 当我使用此代码时: InputStream BulletImgInput = mngr.open("image/Malay/bullet.png"); ,它可以工作。但不要用不同变量分配的字符串替换 url。我已经尝试通过显示 String IntroImage1= "" + languageSelected + "/" + Intro1ImagePath + ".png" ; 来调试它,并且我得到了与这个 "image/Malay 相同的路径/bullet.png"
      猜你喜欢
      • 2017-05-06
      • 2020-02-10
      • 2012-11-02
      • 1970-01-01
      • 2014-05-01
      • 2021-11-03
      • 1970-01-01
      • 2014-09-21
      相关资源
      最近更新 更多