我需要帮助,我不知道为什么我会遇到错误:InputStream is = getResources().openRawResource;
如果它在非活动类中使用(如果我在MainActivity
中声明它,它可以工作)。我需要在MainActivity
行中使用它,我在其中传递数组列表:vardadienas= resources.readData();
public class MainActivity extends AppCompatActivity {
TextView logs;
private List<VDienas> vardadienas = new ArrayList<>();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
logs = (TextView) findViewById(R.id.logs);
GetResources resources = new GetResources();
try {
vardadienas= resources.readData();
} catch (IOException e) {
e.printStackTrace();
}
String text = "";
List<String> vdienas = findByDate(1,2);
for (int a=0;a<vdienas.size();a++){
text+= vdienas.get(a);
text+=" ";
}
logs.setText(text);
}
private List<String> findByDate(int Menesis, int Diena){
List<String> vardi = new ArrayList<>();
for(int i=0;i<vardadienas.size();i++){
VDienas dienas = vardadienas.get(i);
if(Menesis == dienas.getMenesis() && Diena == dienas.getDiena()) {
vardi=dienas.getVardi();
}
}
return vardi;
}
所以,当我运行应用程序时,它会显示错误:
InputStream is = getResources()。openRawResource(R.raw.dati2); 错误:引起:java.lang.NullPointerException:尝试在空对象引用上调用虚拟方法'android.content.res.Resources android.content.Context.getResources()'
public class GetResources extends MainActivity {
public List<VDienas> readData() throws IOException {
List<VDienas> vardadienas = new ArrayList<>();
InputStream is = getResources().openRawResource(R.raw.dati2);
BufferedReader reader = new BufferedReader(
new InputStreamReader(is, Charset.forName("UTF-8"))
);
String line = "";
reader.readLine(); // skip the headers
while((line = reader.readLine()) != null){
// split by ';'
String[] tokens = line.split(";");
// read the data
VDienas janvaris = new VDienas();
janvaris.setMenesis(Integer.parseInt(tokens[0]));
janvaris.setDiena(Integer.parseInt(tokens[1]));
for(int i=0; i<Integer.parseInt(tokens[2]); i++ ) {
janvaris.setVards(tokens[i+3]);
}
vardadienas.add(janvaris);
}return vardadienas;
}
答案 0 :(得分:0)
不要创建Activity
的随机子类,例如GetResources
类。
不要自己创建Activity
的实例,就像使用GetResources
类一样。
或者:
将readData()
移至MainActivity
或
让GetResources
不进行任何扩展,将readData()
更改为public List<VDienas> readData(Context ctxt)
,在getResources()
参数上调用ctxt
,然后通过this
当您创建GetResources
实例(new GetResources(this)
)
getResources()
是Context
上的一种方法。 Activity
从Context
延伸。