im是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;
}
public String controllaLaClasse(int max){
switch(max){
case 0: return "3A";
case 1: return "3B";
case 2: return "3C";
case 3: return "4A";
case 4: return "4B";
case 5: return "4C";
case 6: return "5A";
case 7: return "5B";
}
return null;
}
public void stampaClasse(String classeStampare) throws IOException {
String line = br.readLine();
String[] arraySplit = line.split(",");
while(line != null){
if(arraySplit[1].equals(classeStampare)){
nomi.add(line);
}
}
}
}
这是我的课程,第32行向我生成错误。
答案 0 :(得分:1)
让我们再次阅读错误消息:
"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。
答案 1 :(得分:0)
添加
if (br != null) {
line = br.ReadLine();
String[] splitta = line.split(",");
}
首先检查br是否为空