2012-03-11 82 views
1

我对android编程非常陌生,但我在Java和C++方面有一些经验。虽然我已经能够完成很多程序,但我仍然在FileInputStream中使用NPE。 我正在尝试创建一个考勤程序,用于跟踪学生在讲座中的出勤情况。以下是引发NPE的代码:FileInputStream Android中的NullPointerException异常

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? – 2012-03-11 13:09:28

+0

FileInputStream fIn = openFileInput(“s [”+ i +“]。txt”); 此行导致NPE。 有没有更好的方法来保存和加载对象数组?我正在使用FileOutputStream和FileInputStream。 – humanitarian570 2012-03-11 13:43:37

+0

你确定,有一个名为“s [1] .txt”的文件,你正在寻找正确的文件夹? – stefan 2012-03-11 13:52:37

回答

1

我假设您在访问Subject数组时遇到NullPointerException。

我不会保证它能正常工作,但请试试这个。在onCreate()中,在调用super.onCreate()之后实例化Subject对象。

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'必须是构造函数中的第一个东西。 – stefan 2012-03-11 13:39:06

+0

我试过了,但没有奏效。 NPE是由于FileInputStream,当调用方法a.loadData(s)时。 当没有实例化Subject数组时,我有一个NPE,所以Subject数组不会抛出NPE。 – humanitarian570 2012-03-11 13:52:57

+0

你是怎么调用这个方法的? “a”是出勤的对象吗? – Rikonator 2012-03-11 13:54:31

相关问题