标签: android-assets

Android/Java:I/System.out:错误:java.io.FileNotFoundException:/storage/emulated/0/heremaps/...:打开失败:ENOENT(没有这样的文件或目录)

我尝试将文件夹从资产复制到外部存储,但出现错误消息:

\n
I/System.out: Error :java.io.FileNotFoundException: /storage/emulated/0/heremaps/appcache/sat/12/CURRENT: open failed: ENOENT (No such file or directory)\nI/System.out: Error :java.io.FileNotFoundException: /storage/emulated/0/heremaps/appcache/sat/12/LOCK: open failed: ENOENT (No such file or directory)\nI/System.out: Error :java.io.FileNotFoundException: /storage/emulated/0/heremaps/appcache/sat/12/MANIFEST-000008: open failed: ENOENT (No such file or directory)\nI/System.out: Error :java.io.FileNotFoundException: /storage/emulated/0/heremaps/assets/here/miami/font/FiraGO-Map.LICENSE: open failed: ENOENT (No such file or directory)\nI/System.out: Error :java.io.FileNotFoundException: /storage/emulated/0/heremaps/assets/here/miami/font/FiraGO_Map.ttf: open failed: ENOENT (No such file or directory)\nI/System.out: Error :java.io.FileNotFoundException: /storage/emulated/0/heremaps/assets/here/miami/font/HanSans_ExtraLight.ttf: open failed: ENOENT (No such file or directory)\nI/System.out: Error :java.io.FileNotFoundException: /storage/emulated/0/heremaps/assets/here/miami/font/Lohit.LICENSE: open failed: ENOENT (No such file or directory)\n...\n …
Run Code Online (Sandbox Code Playgroud)

java android android-manifest android-assets

3
推荐指数
1
解决办法
2万
查看次数

读取AssetFileDescriptor时出现IOException

我正在尝试/assets使用以下代码从Android 文件夹中读取位图:

AssetFileDescriptor fd = getAssets().openFd("pic1.jpg")
Bitmap bitmap = BitmapFactory.decodeFileDescriptor(fd.getFileDescriptor());
Run Code Online (Sandbox Code Playgroud)

我得到的例外情况表明文件权限错误:

java.io.IOException: read failed: EBADF (Bad file number)
    at libcore.io.IoBridge.read(IoBridge.java:432)
    at java.io.FileInputStream.read(FileInputStream.java:179)
    at java.io.BufferedInputStream.fillbuf(BufferedInputStream.java:168)
    at java.io.BufferedInputStream.read(BufferedInputStream.java:309)
    at android.graphics.BitmapFactory.nativeDecodeStream(Native Method)
    at android.graphics.BitmapFactory.decodeStream(BitmapFactory.java:587)
    at android.graphics.BitmapFactory.decodeFileDescriptor(BitmapFactory.java:670)
    at android.graphics.BitmapFactory.decodeFileDescriptor(BitmapFactory.java:688)
Run Code Online (Sandbox Code Playgroud)

尝试从输入流中读取它会产生类似的异常:

AssetFileDescriptor fd = getAssets().openFd("pic1.jpg");
FileInputStream is = fd.createInputStream();
Bitmap bitmap = BitmapFactory.decodeStream(is);
Run Code Online (Sandbox Code Playgroud)

例外:

java.io.IOException: lseek failed: EBADF (Bad file number)
Stack trace:
  at java.io.FileInputStream.skip(FileInputStream.java:197)
  at android.content.res.AssetFileDescriptor$AutoCloseInputStream.<init>(AssetFileDescriptor.java:173)
  at android.content.res.AssetFileDescriptor.createInputStream(AssetFileDescriptor.java:138)
Run Code Online (Sandbox Code Playgroud)

直接从输入流中读取会产生另一个例外:

InputStream is = getAssets().open("pic1.jpg");
Bitmap bitmap = BitmapFactory.decodeStream(is);
Run Code Online (Sandbox Code Playgroud)

例外:

java.lang.NullPointerException: asset
  at android.content.res.AssetManager.seekAsset(Native …
Run Code Online (Sandbox Code Playgroud)

android android-assets android-resources

2
推荐指数
1
解决办法
4425
查看次数

从android资产打开wav文件时出现FileNotFoundException

在我们的Android应用程序中,我们打开位于assets/config/notification.wav中的wav文件.要打开并播放声音,我们使用以下代码:

String soundClipPath = "config/notification.wav"
AssetFileDescriptor afd = mContext.getAssets().openFd(soundClipPath);
int soundID = mSoundPool.load(afd, 1);
Run Code Online (Sandbox Code Playgroud)

这已经解决了大约一年的任何问题.突然间,这已停止工作了.我们还没有更新构建之间的任何依赖关系.我能找到的唯一区别是,构建工作是从去年开始.如果我们在netbeans中本地构建apk,但是当我们使用hudson构建apk时它不起作用.我试过以下没有运气:

  • 将wav文件放在res/raw文件夹中
  • 添加-0到maven android插件
  • 验证了文件结构,文件在那里工作.

使用上面的代码时,我们得到以下stacktrace:

java.io.FileNotFoundException: This file can not be opened as a file descriptor; it is probably compressed
at android.content.res.AssetManager.openAssetFd(Native Method)
at android.content.res.AssetManager.openFd(AssetManager.java:331)
...
Run Code Online (Sandbox Code Playgroud)

尝试从res/raw文件夹加载时,以下内容:

android.content.res.Resources$NotFoundException: File res/raw/notification.wav from drawable resource ID #0x7f040000
at android.content.res.Resources.openRawResourceFd(Resources.java:981)
at android.media.SoundPool.load(SoundPool.java:191)
...
Run Code Online (Sandbox Code Playgroud)

有人可以帮我们解决这个奇怪的问题....

最好的祝福,

亨里克

android filenotfoundexception android-assets android-maven-plugin

2
推荐指数
1
解决办法
1743
查看次数

从素材资源文件夹加载的图片的大小与res / drawable不同

在我的项目中,我将图像从文件夹drawable-hdpi加载到一个ImageSwitcher类似的文件中:

int[] images = new int[2];
logoImage = (ImageSwitcher) findViewById(R.id.logo_image);
images[0] = getResources().getIdentifier(ej.getImagemResource(), "drawable", getPackageName());
images[1] = getResources().getIdentifier(ej.getImagemResolvidaResource(), "drawable", getPackageName());
//...
logoImage.setImageResource(images[0]);
Run Code Online (Sandbox Code Playgroud)

但是对于设计问题,由于每幅图像将像600幅300 x 300像素的小图像,因此我决定将它们全部放入素材资源文件夹,然后开始像这样加载它们:

Drawable[] images = new Drawable[2];
images[0] = Drawable.createFromStream(getAssets().open(ej.getImagemResource() + ".png"), null);
images[1] = Drawable.createFromStream(getAssets().open(ej.getImagemResolvidaResource() + ".png"), null);
//...
Run Code Online (Sandbox Code Playgroud)

问题在于,第二种方式显示的图像大小取决于设备的密度(我猜是非常不同),但是当图像放入drawable-hdpi文件夹时,它们在任何密度下都可以很好地显示。

我该如何解决?还是有600张图像放入drawable-hdpi文件夹有问题吗?哪种“正确”方法可以做到这一点?

提前致谢

android android-assets imageswitcher

2
推荐指数
1
解决办法
1155
查看次数

尝试获取现有数据库,Room Android

下午好。我在应用程序中创建了一个现有的数据库。我想通过 Room 对她讲话,但出现错误IllegalArgumentException: Cannot provide null context for the database.。我的代码如下所示:

    @Database(entities = {Series.class}, version = 1, exportSchema = false)
    public abstract class AppDatabase extends RoomDatabase {
    private static AppDatabase INSTANCE;
    private static final String DB_NAME = "base.db";

    public abstract CymbalDao cymbalDao();

    public static AppDatabase getDatabase(final Context context) {
        if (INSTANCE == null) {
            synchronized (AppDatabase.class) {
                if (INSTANCE == null) {
                    INSTANCE = Room.databaseBuilder(context,
                            AppDatabase.class, DB_NAME)
                            .allowMainThreadQueries()
                            .build();
                }
            }
        }
        return INSTANCE;
    }

}
Run Code Online (Sandbox Code Playgroud)

数据库位置:

..\src\main\assets\base.db
Run Code Online (Sandbox Code Playgroud)

我想知道我做错了什么,也许能听到一些提示,谢谢! …

database android android-assets android-room

2
推荐指数
1
解决办法
3470
查看次数

如何使用当前的 Android Studio (3.5.3) 创建资产文件夹?

有谁知道如何在 Android 项目中创建资产文件夹?大约 5 年前,对此有很多答案,但它们不适用于当前版本的 Android Studio (3.5.3)。

android-assets android-studio

2
推荐指数
1
解决办法
2398
查看次数

为什么 Room 不从资产填充数据库?

我正在尝试assets使用 Room 的createFromAssets方法从文件夹中复制预填充的 SQLite 数据库。该数据库规模很大(一张表有约 370k 条目;总大小约为 18mb)。数据库被创建在databases,并且包含适用的表,但没有数据传输到表中。

我已经审查了以下问题,但尚未找到解决方案:

  1. 如何从资产预填充房间数据库?
  2. 房间:数据库未创建
  3. 如何从资产重新创建房间数据库?
  4. Android Room 库无法从资产复制数据库
  5. 房间:数据库未创建

我还查看了以下信息页面:

  1. 预填充您的 Room 数据库
  2. RoomDatabase.Builder
  3. 收拾房间:用这一种方法预先填充您的数据库
  4. Android 景观房间 - Java - Codelab

我尝试等待几分钟,看看数据库填充是否需要时间,但没有出现任何数据。我一直在使用 AS 的设备文件资源管理器从虚拟设备下载数据库,并在 SQLite 的 DB 浏览器中打开它,以及使用 AS 的数据库检查器。

此外,LogCat 始终显示以下内容(每次登录 MainActivity):

D/MainActivity:onCreate 第 1 个 10 个好词未找到

GoodWordsAndFrequency.db 结构:
表 1 -“bad_words”
第 1 列 -“word”,TEXT
表 2 -“english_words”
第 1 列 -“id”,INTEGER
第 2 列 -“word”,TEXT
第 3 列 -“频率”,INTEGER

应用程序 build.gradle 依赖项:

dependencies …
Run Code Online (Sandbox Code Playgroud)

java android-assets android-sqlite android-room

2
推荐指数
1
解决办法
1300
查看次数

带有预填充数据库的房间

在我的应用程序中,我使用带有预填充数据库的 Room,myDatabase.db然后使用以下代码访问该数据库:

private val database = Room
        .databaseBuilder(context.applicationContext, AppDatabase::class.java, dbName)
        .createFromAsset("myDatabase.db")
        .build()
Run Code Online (Sandbox Code Playgroud)

该文件myDatabase.db存储在 /assets/ 文件夹中。然后我必须在这样的数据库中的表中添加一些新行。之后,我得到了一个更新的myDatabase.db文件,我将其复制到 /assets/ 文件夹中替换旧文件。问题来了:安装应用程序后,它仍然使用旧数据。我做了一些搜索,但只找到了与迁移相关的结果。但是,就我而言,表的架构没有变化,只添加了一些新行。此外,我不明白为什么该应用程序不选择新myDatabase.db文件而仍然使用旧文件。

让应用程序使用新文件的唯一解决方案myDatabase.db是卸载应用程序,然后再次安装,但这是我想避免的事情。那么,如何更改myDatabase.dbassets文件夹中的文件并让应用程序通过Room选择新文件中的数据?

android android-assets android-room android-room-prepackageddatabase

2
推荐指数
1
解决办法
225
查看次数

如何从android Junit ServiceTestCase复制setUp方法中的资产文件?

我正在为Android服务实现编写JUnit测试代码,我必须使用sdcard上复制的一些文件初始化测试.我的班级签名是这样的:

public class ImageServiceTest extends ServiceTestCase<ImageService>  
Run Code Online (Sandbox Code Playgroud)

我正在尝试使用提示从资产中复制文件,但getAssets()方法需要扩展Activity类.

public void copyAssets() {
    AssetManager assetManager = getAssets();
    ...
}
Run Code Online (Sandbox Code Playgroud)

那么..我如何将文件从资产复制到SD卡到setUp在android中的junit测试?

提前致谢.

PS:

'getSystemContext().getAssets();','getContext().getAssets();','getApplicationContext();' 返回Service Project上下文,而不是测试项目上下文.

现在我正在尝试使用Instrumentation,但它需要一个Activity,我正在使用一个Service项目.我正在寻找如何在没有活动的情况下使用Instrumentation ...

junit android android-service android-assets servicetestcase

1
推荐指数
1
解决办法
3079
查看次数

无法使用SQLiteAssetHelper类复制数据库

我正在扩展SQLiteAssetHelper类以使用我的资源文件夹中的预填充数据库,但我的应用程序崩溃并发出错误说Caused by: android.database.sqlite.SQLiteCantOpenDatabaseException: unknown error (code 14): Could not open database.

当我签入时ddms,没有数据库文件夹或我的db文件data/data/com.sqlitetospinner1/.因此,为了测试,我创建了一个名为的文件夹并将databasesdb文件推入其中.在此之后,应用程序开始完美运行.

这意味着我的AssetsHelper班级无法复制数据库.

AssetsHelper 类:-

public class AssetsHelper extends SQLiteAssetHelper {

private static final String DATABASE_NAME = "mydb.sqlite";
private static final int DATABASE_VERSION = 1;

public AssetsHelper(Context context) {
    super(context, DATABASE_NAME, null, DATABASE_VERSION);

}


public List<String> getAllColleges(){
    List<String> colleges = new ArrayList<String>();

    // Select All Query
    String selectQuery = "SELECT * FROM colleges_list ORDER BY Organization_Name"; …
Run Code Online (Sandbox Code Playgroud)

android android-assets android-sqlite

1
推荐指数
1
解决办法
3402
查看次数