Мне нужно реализовать службу в android, которая должна иметь возможность контролировать папку для обнаружения определенного файла и чтения того, что он содержит. У меня странное поведение с моим кодом, и я не могу найти причину. Это мой соответствующий код.Android-файл наблюдателя странное поведение
public void onCreate(){
lectorFichCSV = new LectorFichCSV(); //object to read CSV files
ftpFileObserver = new FileObserver(filePath.getAbsolutePath()){
public void onEvent(int event, String file) {
if((FileObserver.CREATE & event) != 0){
Log.i("INFO: ", filePath.getAbsolutePath() + "/" + file + " is created");
if(file.substring(0,3).equals("RVE")){ //If file is created and the one I expect
try{
Log.i("INFO: ", "We have a RVE answer");
is = new FileInputStream(filePath + "/" + file);
lineaVent = lectorFichCSV.parseCSVFileAsList(is); //Get information in a list
//Get dao from ORMLite
dao = getHelper().getLineaVentDao();
Iterator<String[]> iterator = lineaVent.iterator();
if(iterator.hasNext()){
String[] aux = iterator.next();
Log.i("INFO:", "CodLineaVent "+aux[0]);
if(aux[2].equals("S")){
//Update DB information accordin to my file
UpdateBuilder<LineaVent, Integer> updateBuilder = dao.updateBuilder();
updateBuilder.where().eq("_id", aux[0]);
updateBuilder.updateColumnValue("valido", true);
updateBuilder.updateColumnValue("saldo", true);
updateBuilder.update();
lineaVent.clear();
}else if(aux[2].equals("N")){
UpdateBuilder<LineaVent, Integer> updateBuilder = dao.updateBuilder();
updateBuilder.where().eq("_id", aux[0]);
updateBuilder.updateColumnValue("saldo", false);
updateBuilder.update();
lineaVent.clear();
}
File fileToDel = new File(filePath + "/" + file);
fileToDel.delete();
}
}catch(FileNotFoundException e){
e.printStackTrace();
}catch(SQLException e){
e.printStackTrace();
}
}
Я отлажена код и иногда работает, а иногда я получаю lineaVent.size() == 0. Я схожу с ума с этим, я думаю, это возможно, что события происходит быстрее, чем создание моего файла? это было бы причиной, когда я попытался проанализировать мой файл CSV в моем объекте List размером = 0? В этом случае я не получаю FileNotFoundException. Любая помощь будет оценена. Спасибо.
От чтения [JavaDocs для 'FileObserver'] (https://developer.android.com/reference/android/os/FileObserver.html), я ожидал бы, что для нового файла я бы получил' CREATE 'событие, ноль или больше событий' MODIFY' и событие 'CLOSE_WRITE'. Посмотрите, какие события вы получите, и если вы видите 'CLOSE_WRITE', вы, вероятно, должны задерживать свою работу до этого события. – CommonsWare
Итак, проблема в том, что происходит событие, я пытаюсь прочитать файл, и он все еще пуст? Должен ли я вложить другое значение If внутри этого для CLOSE_WRITE и после этого прочитать его? – acostela
«Итак, проблема в том, что происходит событие, я пытаюсь прочитать файл, и он все еще пуст?» - Это моя догадка, да. «Должен ли я вложить другой, если внутри этого для CLOSE_WRITE, и после этого его прочитать?» - Я не могу ответить на это, так как это ваше приложение, а не мое. – CommonsWare