在简单类中,无法打开Assets文件夹中的文件以加载到Android应用程序中的数组中

问题描述 投票:-1回答:1

我想从我的简单Java类“ MyContent”中读取,并且有一个没有参数的静态方法,因为一旦您在内部调用变量,它将在该静态方法中执行代码。我正在尝试通过读取Assets文件夹中的文件并放入列表来向其中添加代码,以便数据适配器读取它。

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”);我需要将它们放入静态方法中,任何人都可以告诉我如何处理此问题吗?

java android filenotfoundexception
1个回答
0
投票

[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>
© www.soinside.com 2019 - 2024. All rights reserved.