0

アクティビティの SavedInstanceState のように、サービスに設定ファイルを与える良い方法を見つけようとしています。このサービスが開始され、アラームが設定され、stopSelf(); が呼び出されます。これが再び実行されるまでには数日かかる可能性があるため、開始してタスクを実行し、完了させたいと考えています。コンマ区切りのテキスト ファイルにいくつかのキーと値のペアを同じにします。

OK、Context が提供する FileInputStream を開きたいのですが、例外を処理する必要があります。エラーを回避するために、最初にファイルが存在することを確認したいと思います。大量のファイルのリストが返された場合は、UI スレッドからこの作業を実行したいと考えています。これが私のコードです:

public void setNewAlarm() {
    Log.d("alarmServ", "inside setNewAlarm()");

    FileInputStream fis;
    Time time = new Time();
    Boolean prefsAvail = false;
    String[] fileList = fileList();

    Runnable fileCheck = new Runnable() {

        public void run() {
            int i = 0;
            while (i<fileList.length) {
                if (fileList[i] == "preferences") {
                    prefsAvail = true;
                    break;
                }
                i++;
            }
            if (prefsAvail) {
                try {
                    fis = openFileInput("preferences");
                } catch (FileNotFoundException ioe) {
                    Log.d("alarmServ", "i/o error: output file fail");
                    ioe.printStackTrace();
                }
            }
        }
    };

    //do something with the InputStream - read prefs and build alarm based on the criteria
}

問題は、明らかに、FileInputStream、boolean、および String[] が runnable 内で使用できないことです。これを回避するにはどうすればよいですか。私の理解では、ネストされたクラスはコンテナーの変数にアクセスできるということでした。メソッド内で宣言されているため、これは真実ではありませんか?

グーグルを試してみたところ、これを行う1つの方法はデータを最終として宣言することであることがわかりましたが、これはブール値またはストリームには適切ではないようです.

4

1 に答える 1