我正在使用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/