getResources()。openRawResource在MainActivity中未使用时出错

时间:2018-04-29 13:24:06

标签: java android

我需要帮助,我不知道为什么我会遇到错误: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;

    }

1 个答案:

答案 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上的一种方法。 ActivityContext延伸。