我准备好了。尝试打开我的assets
目录中的文本文件时,我一直收到错误,该文件的完整路径名是
C:\Users\Dov\Google Drive\AndroidStudioProjects\WordyHelperton - Copy - Copy\
app\src\main\assets
即使我们可以在我的项目的Dictionary.dic
文件夹中查看文件名assets
...
... 我不断收到文件不存在的错误:
W/`````: Can't open <Dictionary.dic>
W/System.err: java.io.FileNotFoundException: Dictionary.dic
W/System.err: at android.content.res.AssetManager.openAsset(Native Method)
W/System.err: at android.content.res.AssetManager.open(AssetManager.java:316)
W/System.err: at android.content.res.AssetManager.open(AssetManager.java:290)
W/System.err: at com.dslomer64.servyhelperton.DatabaseConnector$LoadDatabase.doInBackground(DatabaseConnector.java:328)
W/System.err: at com.dslomer64.servyhelperton.DatabaseConnector$LoadDatabase.doInBackground(DatabaseConnector.java:315)
W/System.err: at android.os.AsyncTask$2.call(AsyncTask.java:288)
W/System.err: at java.util.concurrent.FutureTask.run(FutureTask.java:237)
W/System.err: at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231)
W/System.err: at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
W/System.err: at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
W/System.err: at java.lang.Thread.run(Thread.java:841)
Doc说您可以在open语句中使用分层名称:
W/`````: Can't open <C:\Users\Dov\Google Drive\AndroidStudioProjects\WordyHelperton - Copy - Copy\app\src\main\assets\Dictionary.dic>
W/System.err: java.io.FileNotFoundException: C:\Users\Dov\Google Drive\AndroidStudioProjects\WordyHelperton - Copy - Copy\app\src\main\assets\Dictionary.dic
W/System.err: at android.content.res.AssetManager.openAsset(Native Method)
W/System.err: at android.content.res.AssetManager.open(AssetManager.java:316)
W/System.err: at android.content.res.AssetManager.open(AssetManager.java:290)
W/System.err: at com.dslomer64.servyhelperton.DatabaseConnector$LoadDatabase.doInBackground(DatabaseConnector.java:330)
W/System.err: at com.dslomer64.servyhelperton.DatabaseConnector$LoadDatabase.doInBackground(DatabaseConnector.java:317)
W/System.err: at android.os.AsyncTask$2.call(AsyncTask.java:288)
同样的问题。
你能看到我的代码有什么问题吗?这个问题显而易见,但是经过两天的尝试和完全失败之后,看起来很好,因此必须明显,但我看不到它......
我已经把它包括在内,以防从上面不明显。如果这没有用,我就是靠自己。
DatabaseConnector
onCreate
MainActivity
中assets = getAssets();
dbc = new DatabaseConnector(getApplicationContext(), assets); // to create DB if needed
的调用方式如下:
mAssets
以下是SOURCE_NAME
和DatabaseConnector
的定义方式;还有dbOpenHelper
定义及其对LoadDatabase
的调用。
以下是从createDbIfNecessary
调用 LoadDatabase
__loadDb;
__loadDb = new LoadDatabase();
__loadDb.execute((Object[]) null);
的方式:
C:
修改的
另一种意见:
编辑2
请注意,将代码中的文件名更改为小写无效。它是一个DOS文件,而不是ANDROID。 AND文件永远不会离开驱动器public static String DATABASE_SOURCE =
"C:\\Users\\Dov\\Desktop\\ServyHelperton\\app\\src\\main" +
"\\assets\\dictionary.dic";
W/`````: Can't open <C:\Users\Dov\Desktop\ServyHelperton\app\src\main\assets\dictionary.dic>
W/System.err: java.io.FileNotFoundException: C:\Users\Dov\Desktop\ServyHelperton\app\src\main\assets\dictionary.dic
DATABASE_SOURCE
我可以添加更多代码来证明我刚刚说过的内容,但请相信我。 $_SESSION
名称是我改变的全部。
答案 0 :(得分:1)
您的路径似乎是Dictionary.dic而不是dictionary.dic
看看是否有帮助
答案 1 :(得分:0)
最后,修复很容易或者运气不好,因为我不确定为什么InputStream
和Scanner
本地地doInBackground
解决了这个问题。
请参阅原始问题中的第一张图片。我没有对MainActivity
做出重大更改,但这里有一条有趣的内容:
dbc = new DatabaseConnector(getApplicationContext(), getAssets());
这是有用的:
public class DatabaseConnector
{
static Context mContext;
public DatabaseConnector(Context _context, AssetManager _assets)
{
mAssets = _assets;
mContext = _context;
mDbOpenHelper = new DbOpenHelper(_context, DATABASE_NAME, null, 1);
createDbIfNecessary();
}
private class DbOpenHelper extends SQLiteOpenHelper
{
DbOpenHelper(Context _context, String _name, CursorFactory _factory, int _version)
{
super(_context, _name, _factory, _version);
}
private class LoadDatabase extends AsyncTask<Object, Integer, Void>
{
protected Void doInBackground(Object[] params)
{
Scanner scDict = null; // ***** MOVING/ADDING THESE
InputStream stream; // ***** TWO LINES HERE WAS KEY
try{
stream = mContext.getAssets().open(DATABASE_SOURCE);
scDict = new Scanner(stream).useDelimiter("\r\n");
}
catch(IOException e){e.printStackTrace(); System.exit(69);}
}
}
}
}