В простом классе невозможно открыть файл в папке Assets для загрузки в массив в приложении Android - PullRequest
0 голосов
/ 28 октября 2019

Я хочу прочитать из моего простого Java-класса «MyContent», и есть статический метод без аргументов, так как после вызова переменной внутри он будет выполнять коды внутри статического метода. Я пытаюсь добавить в него код, прочитав файлы в папке «Ресурсы» и поместив их в список, чтобы адаптер данных мог их прочитать.

Класс MyContent:

public class MyContent extends Application {

public static final List<Element> ITEMS = new ArrayList<Element>();

private static Random random = new Random(System.currentTimeMillis());

public static final Map<String, Element> ITEM_MAP = new HashMap<String, Element>();
AssetManager assetManager = getAssets();
static {

    try {
        InputStream inputStream = getAssets().open("data.csv");
        InputStreamReader inputStreamReader=new InputStreamReader((inputStream));
        BufferedReader bufferedReader=new BufferedReader((inputStreamReader));
        String tt="";
        while ((tt=bufferedReader.readLine())!=null){
            MyContent.addItemElement(MyContent.createElement(tt));
        }
    } catch (FileNotFoundException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }

}

}

Проблема в том, что AssetManager assetManager = getAssets ();не может быть статичным, но InputStream inputStream = getAssets (). open ("data.csv");Мне нужно поместить их в статический метод, может кто-нибудь сказать мне, как бороться с этой проблемой?

1 Ответ

0 голосов
/ 28 октября 2019

getAssets() необходимо приложение context инициализировано заранее, прежде чем вы сможете] вызвать его. Нижеприведенный поток кода должен быть в состоянии достичь вашей цели:

public class MyContent extends Application {

    public static final Map<String, Element> ITEM_MAP;

    @Override
    public void onCreate() {
        super.onCreate();

        ITEM_MAP = new HashMap<String, Element>();
        AssetManager assetManager = getAssets();
        try {
            InputStream inputStream = getAssets().open("data.csv");
            InputStreamReader inputStreamReader=new InputStreamReader((inputStream));
            BufferedReader bufferedReader=new BufferedReader((inputStreamReader));
            String tt="";
            while ((tt=bufferedReader.readLine())!=null){
                MyContent.addItemElement(MyContent.createElement(tt));
            }
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

Изменить 1

Внутри AndroidManifest.xml, не забудьте добавить класс приложения под тегом application, например

<application
        android:name=". MyContent"
   ...
</application>
...