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