我尝试将文件夹从资产复制到外部存储,但出现错误消息:
\nI/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) 我正在尝试/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应用程序中,我们打开位于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时它不起作用.我试过以下没有运气:
使用上面的代码时,我们得到以下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
在我的项目中,我将图像从文件夹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文件夹有问题吗?哪种“正确”方法可以做到这一点?
提前致谢
下午好。我在应用程序中创建了一个现有的数据库。我想通过 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)
我想知道我做错了什么,也许能听到一些提示,谢谢! …
有谁知道如何在 Android 项目中创建资产文件夹?大约 5 年前,对此有很多答案,但它们不适用于当前版本的 Android Studio (3.5.3)。
我正在尝试assets使用 Room 的createFromAssets方法从文件夹中复制预填充的 SQLite 数据库。该数据库规模很大(一张表有约 370k 条目;总大小约为 18mb)。数据库被创建在databases,并且包含适用的表,但没有数据传输到表中。
我已经审查了以下问题,但尚未找到解决方案:
我还查看了以下信息页面:
我尝试等待几分钟,看看数据库填充是否需要时间,但没有出现任何数据。我一直在使用 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) 在我的应用程序中,我使用带有预填充数据库的 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
我正在为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
我正在扩展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-assets ×10
android ×8
android-room ×3
java ×2
android-room-prepackageddatabase ×1
database ×1
junit ×1