2011-01-20 2 views
2

알아낼 수없는 이상한 충돌이 있습니다.동일한 코드를 실행하는 동안 첫 번째 실행시 앱이 두 번째로 실행되지 않고 충돌합니다.

앱을 처음 시작하면 /data/Message.xml이 있는지 확인합니다. 그렇지 않다면 하나를 만듭니다. 그런 다음 xml 파일을 구문 분석하는 페이지로 이동합니다. 존재하지 않기 때문에 충돌이 발생합니다 (그래서 파일을 만들지 못했습니다). 나는 데이터 디렉토리를 보았고 실제로 그것을 만들지 않았다.

그런 다음 다시 실행하고 동일한 코드를 실행하지만 이번에는 XML 파일을 만듭니다.

처음 작동하지 않는 이유를 모르겠지만 앱이 처음 충돌하고 두 번째로 실행될 때와 동일한 조건이 적용될 때까지는 앱이 아무 것도 변경하지 않습니다.

Android 일입니까?


더 자세한 정보 : 파일을 사용할 수있는 경우

내가 확인 : 경우 (file.exists() == false)를 { createFirstXML()

File file = new File(Environment.getDataDirectory() + "/data/com.name.app/files/Message.xml"); 

; }

createFirstXML() :

public void createFirstXML() { 

파일 newxmlfile = 새로운 파일 (Environment.getDataDirectory() + "/data/com.name.app/files/Message.xml"); { newxmlfile.createNewFile(); } catch (IOException e) { e.printStackTrace(); } FileOutputStream fileos = null; 시도 { fileos = new FileOutputStream (newxmlfile); } catch (FileNotFoundException e) { e.printStackTrace(); } XmlSerializer serializer = android.util.Xml.newSerializer(); { serializer.setOutput (fileos, "UTF-8"); 시도하십시오. serializer.startDocument (null, Boolean.valueOf (true)); serializer.setFeature ("http://xmlpull.org/v1/doc/features.html#indent-output", true);

serializer.startTag (null, "Message");

serializer.startTag (null, "Service"); serializer.text ("App"); serializer.endTag (null, "Service");

serializer.endTag (null, "Message");

serializer.endDocument(); serializer.flush(); fileos.close(); } catch (예외 e) { e.printStackTrace(); } }

로그 :

java.io.IOException: No such file or directory 
bla 
bla 
java.io.FileNotFoundException: /data/data/com.name.app/files/Message.xml (No such file or directory) 
bla 
bla 
java.lang.IllegalArgumentException 
bla 
bla 
java.io.FileNotFoundException: /data/data/com.name.app/files/Message.xml (No such file or directory) 
bla 
bla 
java.io.FileNotFoundException: /data/data/com.name.app/files/Message.xml (No such file or directory) 
bla 
bla 

나는 그것이 또한 메시지를 찾을 수 없습니다 내 응용 프로그램을 실행 두 번째 시간입니다.xml (왜냐하면 createFirstXML();을 실행하기 때문에) 예외를주지 않는다.

정말 이해가 안가 .. 모든

+1

파일 디렉토리도 존재합니까? 이것은 XML 파일이 생성되지 않는 이유 일 수 있습니다. –

+0

DDMS에서 확인했습니다. 이상한 일은 내가 두 번째로 앱을 시작한 코드와 동일했다. – Galip

답변

2

첫째, getDataDirectory 아마 당신이 원하는 없습니다. 현재 (현재) 패키지가 설치된 최상위 디렉토리를 반환하므로 "/data/com.themobilecompany.sosinternational/files/Message.xml"을 추가하면 "/data/data/com.themobilecompany.sosinternational"이됩니다. /files/Message.xml ". 귀하의 예외 정보를 참조하십시오

java.io.FileNotFoundException: /data/data/com.themobilecompany.sosinternational/files/Message.xml (No such file or directory)

이 디렉토리를 사용하면 예외를 가져오고 파일을 열 수 결코있는 이유입니다 존재하지 않습니다.

getFilesDir()을 사용하면 응용 프로그램의 개인 파일 위치가 반환되므로 파일 시스템 레이아웃을 변경하는 향후 안드로이드 버전과 호환 될 수 있습니다.

getFilesDir는 현재 "/data/com.themobilecompany.sosinternational/"그래서

는 파일 디렉토리를 생성하는 것을 잊지 마세요

File newxmlfile = new File(Context.getFilesDirectory() + "/files/Message.xml");

File newxmlfile = new File(Environment.getDataDirectory() + "/data/com.themobilecompany.sosinternational/files/Message.xml");

을 변경하려고 돌아갑니다 아직 존재하지 않으면.

onCreate에서이 코드를 실행 하시겠습니까? 아니면 onCreate 또는 유사하게 트리거합니까? 그렇다면 정상적인 활동주기는 앱을 시작할 때마다 코드가 실행되지 않는다는 의미입니다. onCreate는 활동이 생성 될 때 호출되며, 대부분의 경우 종료 할 때 (즉, 뒤로 버튼을 누르면), 활동을 일시 중단하는 것입니다. Android를 다시 시작하면 Android가 기존의 일시 중지 된 활동을 재사용하므로 앱의 후속 실행으로 보이는 onCreate가 호출되지 않습니다. 따라서 예외가 항상 발생하지 않는 이유는 무엇입니까?

+0

이것이 성공했다! 'getFilesDir()'은 "data/com.bla.bla/files"가 아닌 "/data/com.bla.bla/files"를 반환하지만 나는 여전히 첫 번째 방법으로 XML을 만들지 못했다. 차이는 거의 없습니다. Android의 수명주기에 대해 알고 있었지만 문제가 아니 었습니다. 어쨌든, 도와 주셔서 감사합니다! – Galip

+1

온라인 문서를 읽었는데 약간 모호합니다. 잘못된 정보에 대해서는 사과드립니다. 기꺼이 올바른 방향으로 안내 할 수 있습니다. – RivieraKid

관련 문제