Не удается получить доступ к ресурсам Android (для меня не работает ни пост, ни учебник), пожалуйста, помогите! - PullRequest
3 голосов
/ 19 января 2011

Мне грозит проклятие доступа к ресурсам через Android.Я использую NetBeans 6.9.1 и тестирую на виртуальном устройстве Android 2.3.Я пытаюсь получить доступ к файлу базы данных («database.db»), хранящемуся в папке активов (хотя мне пришлось создать каталог самостоятельно, потому что он даже не существовал в папке моего проекта), и я простоне в состоянии сделать это после того, как потерял более 3 дней в поисках решения.Вот краткий обзор моего трагического процесса:

  • Я создал каталог с именем «assets» в моем каталоге проектов NetBeans (именно там, где находятся папки «res» или «src»).
  • Я скопировал файл «database.db» внутри и даже «sample.txt», который я также сохранил в подкаталоге «assets / sub», так как я тестирую все, что только возможно.
  • У меня есть класс, который наследуется от «SQLiteOpenHelper», где я просто пытаюсь получить доступ к файлу базы данных и, увидев, что это почти невозможно, я просто пытаюсь увидеть, что содержит папка моего ресурса:

    public class DataBaseHelper extends SQLiteOpenHelper{
    private static String DB_PATH = "/data/data/org.me.androidbt/databases/";
    private static String DB_NAME = "database.db";
    private SQLiteDatabase myDataBase;
    private final Context myContext;
    
    public DataBaseHelper(Context context) {
        super(context, DB_NAME, null, 1);
        this.myContext = context;
    }
    
    private void myFunction() throws IOException{
    //Firs try, explodes terribly at the first line
    InputStream is = myContext.getAssets().open("sub/sample.txt");
    BufferedReader br = new BufferedReader(new InputStreamReader(is));
    String line = null;
    int number = 0;
    while ((line = br.readLine()) != null) {
        // Just used to check the "line" value when debugging
        number++;
    }
    br.close();
    
    // Second try, didn't explodes
    AssetManager mngr = myContext.getResources().getAssets();
    String[] str = mngr.list("");
    // String only contains three elements: "images", "sounds" and "webkit"
    // (an there aren't such things in my assets folder)
    
    // Real try to open the DB, dies horribly and blowns up my PC
    InputStream myInput = myContext.getAssets().open(DB_NAME);
    

Я также пытался получить к нему доступ через сам MainActivity:

try{
        AssetManager mng = this.getAssets();
        String[] str = mng.list("");
        // The same three elements...

        // And this explodes in a nuclear toxic cloud that kills a thousand birds
        InputStream is = this.getAssets().open("sub/sample.txt");
        BufferedReader br = new BufferedReader(new InputStreamReader(is));
        String line = null;
        int number = 0;
        while ((line = br.readLine()) != null) {
            number++;
        }
        br.close();
    }catch(Exception e){
        // Life is sad...
    }

А теперь несколько вопросов: что я делаю не так?Правильно ли размещена папка с активами?Мои файлы правильно скопированы?Правильно ли размещен мой код?

Ответы [ 2 ]

3 голосов
/ 07 февраля 2011

Исправление:

Создайте каталог с именем 'assets' в корневом каталоге вашего проекта (тот же каталог, в котором живет AndroidManifest.xml)

В /nbproject/project.properties измените

* добавить эти две строки (не будет) *

assets.dir = assets assets.available = true

В /nbproject / build-impl.xml,

в цели if = assets.available есть строка, которая читает

, которую необходимо изменить на

Вот и все - у вас все должно быть в порядке, и «file: /// android_asset /» должен быть доступен для вашего приложения и содержать содержимое каталога ресурсов вашего проекта.

Получилэта ссылка и у меня сработало !! ...

http://blog.yetisoftware.com/2009/04/02/android-netbeans-and-the-assets-directory/

0 голосов
/ 10 сентября 2014

У меня была эта проблема, и я предлагаю вам проверить пару вещей:

  1. Если имя каталога написано на английском языке.
  2. , у вас есть только один каталог в корне ресурсов (в этот каталог вы можете вставить пару директорий).

Например: assets -> app -> image, assets -> app -> another dir.В этом примере каталог приложения - это only dir в корне asssete.

...