FileInputStream NullPointerException в Android

1

Я очень новичок в программировании на Android, но у меня есть опыт работы на Java и C++. Хотя мне удалось выполнить большую часть программы, я застрял в NPE в FileInputStream. Я пытаюсь создать программу посещаемости, которая отслеживает посещаемость студента на лекциях. Здесь код, который бросает NPE:

    public class Attendance extends Activity {
Subject s[] = new Subject[13];
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
    for(int i=0;i<13;i++) {
        s[i] = new Subject();
    }
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
}

public void loadData(Subject s[]) throws IOException{
    for(int i=0;i<13;i++) {
        int a[] = new int [2];
        int x=0;
        try {
            FileInputStream fIn = openFileInput("s["+i+"].txt");
            InputStreamReader isr = new InputStreamReader(fIn); //NPE occurs here
            //char buff[] = new char[100];
            //isr.read(buff);
            BufferedReader br = new BufferedReader(isr);
            String str = new String();
            while ((str=br.readLine())!=null) {
                a[x]=Integer.parseInt(str);
                x++;
            }
            s[i].acceptAttd(a[0]);
            s[i].acceptLecs(a[1]);
        }
        catch(IOException e) {
            //do nothing.
        }
    }
}

public void addAttnd(View v) throws IOException{
    setContentView(R.layout.addattnd2);
    Attendance a = new Attendance();
    a.loadData(s); //this line calls the method containing FileInputStream
}
  • 1
    Какая линия вызывает NPE?
  • 0
    FileInputStream fIn = openFileInput ("s [" + i + "]. Txt"); Эта линия вызывает NPE. Есть ли лучший способ сохранить и загрузить массив объектов? Я использую FileOutputStream и FileInputStream.
Показать ещё 2 комментария
Теги:
nullpointerexception
fileinputstream

1 ответ

1

Я предполагаю, что вы получаете исключение NullPointerException при доступе к массиву Subject.

Я не собираюсь гарантировать, что это сработает, но попробуйте это. В своем onCreate() создайте объекты Subject после вызова super.onCreate().

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    for(int i=0;i<13;i++) {
        s[i] = new Subject();
    }
    setContentView(R.layout.main);
}
  • 0
    afaik вы правы: super должно быть первым в конструкторах.
  • 0
    Я попробовал, но это не сработало. NPE из-за FileInputStream, когда вызывается метод a.loadData (s). У меня был NPE, когда не было создания экземпляра массива Subject, поэтому массив Subject не выбрасывает NPE.
Показать ещё 4 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню