Чтение из файла - как? - PullRequest
0 голосов
/ 21 февраля 2019

Я новичок в Android, и я попытался приложение, которое использует Bluetooth для сканирования и контроля, если строка, которую я красный в файле, соответствует названию устройства, которое я нашел, но я не могу этого сделать, потому чтоиспользуйте 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 выдает мне ошибку.

Ответы [ 2 ]

0 голосов
/ 21 февраля 2019

Давайте снова прочитаем сообщение об ошибке:

"Attempt to invoke virtual method 'java.lang.String java.io.BufferedReader.readLine()' on a null object"

Вы пытаетесь вызвать 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 в ваших журналах.

0 голосов
/ 21 февраля 2019

добавить

if (br != null) {
    line = br.ReadLine();
    String[] splitta = line.split(",");
}

Чтобы проверить, является ли значение br первым нулевым

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...