为了账号安全,请及时绑定邮箱和手机立即绑定

从文件中读取 - 如何?

从文件中读取 - 如何?

繁花如伊 2022-06-30 10:35:09
我是 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 行产生了错误。
查看完整描述

2 回答

?
翻翻过去那场雪

TA贡献2065条经验 获得超13个赞

让我们再次阅读错误消息:


"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 {

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

    } catch (FileNotFoundException e) {

        e.printStackTrace();

    }

似乎找不到“com/pack/regele/alunniScuola.csv”。在这种情况下,将抛出 FileNotFoundException 并且 br 不会被初始化。因此它将为空。您正在捕获异常,因此当使用 br 时程序会继续运行并在稍后崩溃。


查看logcat。如果我是对的,您应该在日志中找到 FileNotFoundException。


查看完整回答
反对 回复 2022-06-30
?
慕的地6264312

TA贡献1817条经验 获得超6个赞

添加


if (br != null) {

    line = br.ReadLine();

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

}

首先检查 br 是否为空


查看完整回答
反对 回复 2022-06-30
  • 2 回答
  • 0 关注
  • 101 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信