Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/182.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在简单类中,无法打开资产文件夹中的文件以加载到Android应用程序中的阵列_Java_Android_Filenotfoundexception - Fatal编程技术网

Java 在简单类中,无法打开资产文件夹中的文件以加载到Android应用程序中的阵列

Java 在简单类中,无法打开资产文件夹中的文件以加载到Android应用程序中的阵列,java,android,filenotfoundexception,Java,Android,Filenotfoundexception,我想从我的简单java类“MyContent”中读一读,这里有一个没有参数的静态方法,因为一旦您在其中调用变量,它就会在静态方法中执行代码。我试图通过读取Assets文件夹中的文件并将其放入列表中来向其中添加代码,以便数据适配器能够读取它 内容分类: public class MyContent extends Application { public static final List<Element> ITEMS = new ArrayList<Element>()

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

内容分类:

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();
    }

}
公共类MyContent扩展应用程序{
public static final List ITEMS=new ArrayList();
私有静态随机=新随机(System.currentTimeMillis());
公共静态最终映射项_Map=new HashMap();
AssetManager AssetManager=getAssets();
静止的{
试一试{
InputStream InputStream=getAssets().open(“data.csv”);
InputStreamReader InputStreamReader=新的InputStreamReader((inputStream));
BufferedReader BufferedReader=新的BufferedReader((inputStreamReader));
字符串tt=“”;
while((tt=bufferedReader.readLine())!=null){
MyContent.addItemElement(MyContent.createElement(tt));
}
}catch(filenotfounde异常){
e、 printStackTrace();
}捕获(IOE异常){
e、 printStackTrace();
}
}
}

问题是AssetManager AssetManager=getAssets();不能是静态的,但输入流InputStream=getAssets().open(“data.csv”);我需要将它们放入静态方法中,有人能告诉我如何处理这个问题吗?

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();
        }
    }
}


在静态初始化器中放置繁重的任务(例如读取数据)不是一个好主意,因为这可能会导致类加载失败。我不能在活动中使用它。这只是一个普通的java类,它将加载文件并放入列表中。我现在的问题是我想向主活动显示文件内容。但是如果我在主活动onCreate中执行此操作,然后我单击“添加”按钮向另一个活动添加内容,然后返回,主活动将再次重新加载,这将再次添加到列表中。也许每次我都会尝试加载主活动中的所有内容,一旦添加了内容,我将写入“data.csv”文件?此代码段不在
活动中
,它位于
应用程序
中,这是应用程序的起点。注意
MyContent扩展了应用程序
。因此,即使是一个简单的java类也能够定义一个onCreate方法,该方法将被安卓应用程序识别?
<application
        android:name=". MyContent"
   ...
</application>