android - FileObserverでトースト通知を作成する

原文 android toast

FileObserverを使用して特定のフォルダーを監視し、新しい受信ファイルを自分のサーバーにアップロードし、結果を解析して、ユーザーにトースト通知を出力します。コードスニペットは次のとおりです。

FileInputStream in = new FileInputStream(filePath);
data = readBytes(in);
if (data.length > 1){

    //Upload method here

    results = G.Upload(data);

    if(results.equals("PASS")){
        //Toast here
    }

    if(results.equals("FAIL")){
        //Different toast here
    }
}


内部でトーストを作成できますか、それともresults変数を別のクラスに渡して、そこからトースト通知を出力する必要がありますか?どうもありがとう。

編集:上記のスニペットはFileObserverクラスにあります。
答え
了解しました、これを試してください

まず、オブザーバーと呼ばれるインターフェイスを作成しましょう

public interface ObserverActivity{
  public void onFileObserved(int Event, String path);
}


次に、FileObserverSubclassを作成しましょう

public class MyFileObserver extends FileObserver{
  private HashSet<ObserverActivity> registeredObservers;

public MyFileObserver(String path) {
    super(path, FileObserver.ALL_EVENTS);
    absolutePath = path;
    registeredObservers = new HashSet<ObserverActivity>();
}

public void registerObserver(ObserverActivity toRegister){
  registeredObservers.add(toRegister);
}

public void unregisterObserver(ObserverActivity toUnregister){
  registeredObservers.remove(toUnregister);
}

public void onEvent(int Event, String path){
  for(ObserverActivity o: registeredObervers){
    o.onFileObserved(Event, path);
  }
}


}

最後に、トーストをやりたいアクティビティでは、次のようにします。

public class MyActivity extends Activity implements ObserverActivity{
  MyFileObserver myFileObserver;
  protected onCreate(Bundle icicle){
    //other setup stuff
    myFileObserver = new MyFileObsever("path/to/monitor");
    myFileObserver.registerObserver(this);
    myFileObserver.startWatching();
  }


  protected onPause(){
    myFileObserver.stopWatching();
    myFileObserver.unregisterObserver(this);
  }

  protected onResume(){
    myFileObserver.registerObserver(this);
    myFileObserver.startWatching();
  }

  public void onFileObserved(int Event, String Path){
    //do toast in here.

  }


停止して登録を解除する必要があります。このアクティビティに戻らない可能性があるか、破棄される可能性があるためです。それが戻らない場合は、ファイルを監視し、必要なリソースを使用し続けます。それは無駄であり、悪いこともあります。アクティビティが破棄された場合、onFileObservedメソッドを呼び出そうとするとファイルオブザーバーがnullポインター例外を発生させるため、登録を解除する必要があります。

startWatching関数のドキュメントによると、次のことに注意してください。


監視対象のファイルまたはディレクトリはこの時点で存在している必要があります。そうしないと、イベントが報告されません(後で表示される場合でも)。監視がすでに開始されている場合、この呼び出しは効果がありません。


したがって、ファイルのダウンロードがすでに開始されていることを確認してください。
関連記事

android - ImageViewのonDrawに関するロジック

java - 画面がタイムアウトしたときに、Activity onPauseメソッドが呼び出されますか?

android - 通知を長期間継続的に送信すると、Android通知バーのCPU使用率が増加する

android - TableViewのアイコンメニュー(Google+のような)

android - ユーザーがAndroidアプリで間違ったパスコード(ロック画面)を入力したかどうかを知る方法

android - 画面の向きを変更した後にブロードキャストレシーバーがクラッシュし、機能しない

android - ギャラリーから選択したPicasa画像のサムネイルを取得するにはどうすればよいですか?

java - Androidアクティビティにバルーンヒントを表示する

android - Androidで動的にアクセス許可を付与する方法、つまりアプリケーションの実行中に、これは実現可能ですか?

android - android:リストビューの行を編集するにはどうすればよいですか?