我正在使用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类中。

最佳答案

好吧,试试这个

首先让我们创建一个名为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函数的文档,该文档:


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


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

关于android - 在FileObserver中创建 toast 通知,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7801519/

10-12 00:29
查看更多