从文件中读取 - 如何?

我是 android 的新手,我尝试使用蓝牙进行扫描并控制我在文件中红色的行是否等于我找到的设备的名称,但我不能这样做,因为使用 readLine( ) 生成错误:“尝试在空对象上调用虚拟方法'java.lang.String java.io.BufferedReader.readLine()'”,我不知道如何解决它。


package com.pack.regele;


import android.widget.ArrayAdapter;


import java.io.BufferedReader;

import java.io.FileNotFoundException;

import java.io.FileReader;

import java.io.IOException;


public class readFromFile{

MainActivity ma = new MainActivity();


BufferedReader br;


{

    try {

        br = new BufferedReader(new FileReader("com/pack/regele/alunniScuola.csv"));

    } catch (FileNotFoundException e) {

        e.printStackTrace();

    }

}


ArrayAdapter<String> nomi = null;


public readFromFile(ArrayAdapter <String> nomi){

    this.nomi = nomi;

}


public void controllaAlunnoDellaClasse() throws IOException {

    String line, classeCercare = null;

    for(int i = 0; i < 2; i++){

        line = br.readLine();

        String[] splitta = line.split(",");

        while(line != null){

            if(splitta[0].equals(nomi.getItem(i))){

                classeCercare = contaAlunniClasse(splitta[1]);

            }

        }

    }

    stampaClasse(classeCercare);

}


public String contaAlunniClasse(String classe){

    int[] contatoreClasse = new int[8];

    switch(classe){

        case "3A": contatoreClasse[0]++; break;

        case "3B": contatoreClasse[1]++; break;

        case "3C": contatoreClasse[2]++; break;

        case "4A": contatoreClasse[3]++; break;

        case "4B": contatoreClasse[4]++; break;

        case "4C": contatoreClasse[5]++; break;

        case "5A": contatoreClasse[6]++; break;

        case "5B": contatoreClasse[7]++; break;

    }

    int max = controllaClasseMax(contatoreClasse);

    return controllaLaClasse(max);

}


public int controllaClasseMax(int[] contatoreClassi){

    int max = contatoreClassi[0], classeMaggiore = 0;

    for(int i = 1; i < contatoreClassi.length; i++){

        if(contatoreClassi[i] > max){

            max = contatoreClassi[i];

            classeMaggiore = i;

        }

    }

    return classeMaggiore;

}



这是我的课,第 32 行产生了错误。


繁花如伊
浏览 140回答 2
2回答

翻翻过去那场雪

让我们再次阅读错误消息:"Attempt to invoke virtual method 'java.lang.String java.io.BufferedReader.readLine()' on a null object"您正在尝试在 null 对象上调用 readLine()。您在哪个对象上调用 readLine()?我们可以在这里找到它:line = br.readLine();所以,我们发现 br 是空的。为什么它是空的?您正在初始化程序块中初始化 br:try {&nbsp; &nbsp; &nbsp; &nbsp; br = new BufferedReader(new FileReader("com/pack/regele/alunniScuola.csv"));&nbsp; &nbsp; } catch (FileNotFoundException e) {&nbsp; &nbsp; &nbsp; &nbsp; e.printStackTrace();&nbsp; &nbsp; }似乎找不到“com/pack/regele/alunniScuola.csv”。在这种情况下,将抛出 FileNotFoundException 并且 br 不会被初始化。因此它将为空。您正在捕获异常,因此当使用 br 时程序会继续运行并在稍后崩溃。查看logcat。如果我是对的,您应该在日志中找到 FileNotFoundException。

慕的地6264312

添加if (br != null) {&nbsp; &nbsp; line = br.ReadLine();&nbsp; &nbsp; String[] splitta = line.split(",");}首先检查 br 是否为空
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java