在FileObserver中创建Toast通知

时间:2011-10-18 01:32:42

标签: 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
    }
}

我可以在里面创建一个toast,还是需要将results变量传递给另一个类并从那里打印Toast通知?非常感谢。

编辑:以上代码段位于FileObserver类中。

1 个答案:

答案 0 :(得分:2)

好的,试试这个

首先让我们创建一个名为Observer的接口

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.

  }

你必须停止并取消注册,因为我们可能永远不会回到这个活动,或者它可能会被销毁。如果我们永远不会回到它,我们将继续观察文件并使用所需的资源。那是浪费而且不好。我们需要取消注册,因为如果Activity被销毁,文件观察者在尝试调用onFileObserved方法时会引发空指针异常。

请注意,根据startWatching函数的文档:

  

此时必须存在受监视的文件或目录,否则不会报告任何事件(即使稍后出现)。如果已开始监控,则此调用无效。

因此,请确保您已开始下载文件。

相关问题