1

私は2つの関数を含むクラスを持っています:

public class FileHandler extends Activity  {
public void writeToFile(){
    String fileName = "lastDevice.txt";
    try {


        FileOutputStream fos = openFileOutput(fileName, MODE_PRIVATE); //Exception thrown here

        fos.write("some device id".getBytes());
        fos.close();

        Toast.makeText(this, "File updated", Toast.LENGTH_SHORT).show();
    } catch (FileNotFoundException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
}
public String readFromFile(){
    try {
        String fileName = "lastDevice.txt";

        FileInputStream fis = openFileInput(fileName); //Exception thrown here
        InputStreamReader isr = new InputStreamReader(fis);
        BufferedReader br = new BufferedReader(isr);
        String sLine = null;
        String data ="";
        while ((sLine = br.readLine())!=null) {
            data+= sLine;
        }
        return data;
    } catch (FileNotFoundException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
        return "FileNotFoundException";
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
        return "IOException";
    } catch (NullPointerException e){
        // TODO Auto-generated catch block
        e.printStackTrace();
        return "Null Pointer Exception";
    }
}

これらの関数は、次のようにメイン アクティビティから呼び出されます。

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);


    lvDevices = (ListView)findViewById(R.id.ListViewDevices);
    lastDeviceTxt = (TextView)findViewById(R.id.lastDeviceTxt);

    //get last connected device
    FileHandler fh = new FileHandler();
    String last = fh.readFromFile();

    lastDeviceTxt.setText(last);
}

しかし、私NullPointerExceptionは両方の機能から取得し続けます。
私の関数を実行するとMainActivity(メインアクティビティにコピーしました)、正常に動作します。私は何を間違っていますか?(私はandroid開発に非常に慣れていないことを覚えておいてください)。

4

1 に答える 1

1

FileHandlerアクティビティとして定義しました。ここで行っているアクティビティを自分でインスタンス化することはできません。

FileHandler fh = new FileHandler();

アクティビティは、Android フレームワークによってインスタンス化する必要があります (そうしないと、コンテキストが正しく設定されません)。

これらのメソッドを自分のアクティビティに入れたくない場合は、それらを別のクラスに入れることができます。ただし、そのクラスは Activity から継承できません。Context次に、Activityをこれらのメソッドに渡して、次のようなメソッドを呼び出せるようにする必要があることがわかります。openFileInput()

于 2013-02-19T14:12:10.753 に答える