2012-12-03 2 views
-2

안드로이드 어색한 행동 : 나는 파일 이름을 지정하는 방법을 사용할 때나는이 같은 파일 이름을 지정할 때 아무 문제가 없습니다, 새 파일을 생성하는 응용 프로그램을 만들고있어

private String FILENAME = "myFilename"; 

는하지만, 컴파일러가 연속 점프를 내 클래스 선언에 다음

String lineSep = System.getProperty("line.separator"); 

:

public class AddUser extends Activity 

그리고 응용 프로그램이 충돌이 라인.

로그 파일의 말씀입니다 :

12-03 16:26:12.814: E/AndroidRuntime(20307): FATAL EXCEPTION: main 
12-03 16:26:12.814: E/AndroidRuntime(20307): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.myapp.app/com.myapp.app.ProfileSaved}: java.lang.NullPointerException 
12-03 16:26:12.814: E/AndroidRuntime(20307): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2059) 
12-03 16:26:12.814: E/AndroidRuntime(20307): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2084) 
12-03 16:26:12.814: E/AndroidRuntime(20307): at android.app.ActivityThread.access$600(ActivityThread.java:130) 

이 내 파일이 명명되는 방법

int firstArray; 
int nextArray; 

private String fileNamer(){ 

    File dataDirectory = Environment.getDataDirectory(); 
    File fileDir = new File(dataDirectory, "data/com.myapp.app/files"); 

    String[] filenameArray = fileDir.list(); 

    Arrays.sort(filenameArray); 

    if (filenameArray.length == 0){ 
     return "0"; 
    } 

    if (filenameArray.length == 2500){ 
     return "too_many_items"; 
    } 

    if (!filenameArray[0].equals("0")){ 
     return "0"; 
    } 

    int arrayLength = filenameArray.length; 
    int i; 

    for(i=0; i<arrayLength-1;){ 

     firstArray = Integer.parseInt(filenameArray[i]); 
     nextArray = Integer.parseInt(filenameArray[i+1]); 

     if (firstArray+1 == nextArray){ 
      i++; 
     } 
    } 
    return Integer.toString(nextArray+1); 
} 

방법은 잘 동작하는 것 같지만 난 그냥 왜 볼 수없는이 것 그 프로그램의 나머지 부분에 영향을주는 것은 문자열을 반환하는 것 뿐인가?

+0

스택 추적 –

+0

코드가 버그가있어서 잘못된 장소를 보는 대신 오류 로그를주의 깊게 읽어야합니다.로그 고양이를 정확하게 인용하고자한다면'NullPointerException' 크래시가 발생하는 곳을 알 수 있습니다. 그러나 지금 당장은 자신을 확인한 다음 거기에 언급 된 파일과 행을 살펴 봐야합니다. –

+0

오류 로그를 처음 다섯 행으로 업데이트했습니다. 그게 필요한거야? – user1813774

답변

0

귀하의 의견에 감사드립니다.

나는 그것이 마침내 올바르게되었다고 생각한다. 우선 모든 메소드는 실제로 버그가 있지만 실제로 문제가 아니 었습니다. 좋은 대답은 다음과 같습니다.

"String 사이에 차이가 있으며 String이 반환되는 메소드를 호출합니다. 다른 클래스에서 String 호출을 사용하려면 변수를 static으로 설정해야 할 것이므로 String이 작동하고 '메서드 호출이'String '이 아닌 이유입니다. 단지의 경우 다른 사람의 코드에서 버그에 대한

if

에서
if (firstArray+1 == nextArray) 

이 경우에 else1, 3, 4 때문에 다음 파일이 2라는 이름의 도착처럼 파일 이름 사이에 빈 공간이 필요 적 관심 .

다른 버그는 파일 이름을 Strings으로 비교했을 때 파일을 정렬 할 때 1, 10, 2, 3, 4, 5, 6, 7, 8, 9으로 정렬되었습니다.

제가 사용한 해결책은 0001, 0002,과 같은 파일 이름의 맨 앞에 0을 추가하는 것이 었습니다.

1

if (filenameArray.length == 2500){if (filenameArray.length >= 2500){이어야합니다. 하지만 더 중요한 것은,

for(i=0; i<arrayLength-1;){ 
     firstArray = Integer.parseInt(filenameArray[i]); 
     nextArray = Integer.parseInt(filenameArray[i+1]); 

가 존재하지 않습니다 filenameArray[arrayLength] 액세스 할 수 있습니다. 당신이 의미하는 것 같아요

for(i=0; i<arrayLength-2;){ 

그리고 적어도 두 가지 요소가 어레이에 있는지 확인해야합니다. 그건 나에게 맞지 않아.

+0

고맙습니다.> =로 변경했지만 전에는 (i = 0; i <= arrayLength-2;) 이전에 변경했지만 (i user1813774