2013-07-26 2 views
0

메모장 앱을 쓰고 있는데, 내가 만들 때까지 create a password 화면이 튀어 나오고 그때부터 log in 화면이 나타납니다.안드로이드는 내 파일을 기억하지 못합니다.

File myFile = new File(getFilesDir() + "pass.txt"); 
if (!myFile.exists()) // if "pass.txt" DOESN'T exist, make them create a password 
{ 
    try { 

    // this writes the password to the "pass.txt" file 
    // which is the one that is checked to exist. 
    // after it is written to, it should always exist. 
    FileOutputStream fos = openFileOutput("pass.txt", Context.MODE_PRIVATE); 
    fos.write(pass.getBytes()); 

    // this writes the security question to a different file. 
    fos = openFileOutput("securityQ.txt", Context.MODE_PRIVATE); 
    fos.write(secQ.getBytes()); 

    // this writes the security answer to a different file. 
    fos = openFileOutput("securityAnswer.txt", Context.MODE_PRIVATE); 
    fos.write(secAns.getBytes()); 

    fos.close(); 

} catch(Exception e) {} 

^그 한 방법이다 : 여기

일부 샘플 코드이다. 그런 다음, 또 다른 내가 이렇게 :

try { // input the right password to the String data 
    char[] inputBuffer = new char[1024]; 
    fIn = openFileInput("pass.txt"); 
    isr = new InputStreamReader(fIn); 
    isr.read(inputBuffer); 
    data = new String(inputBuffer); 
    isr.close(); 
    fIn.close(); 
}catch(IOException e){} 

if (password.getText().toString().equals(data)) // if password is right, log in. 
{ 
    loggedin(); 
} 
else // if the password entered is wrong, display the right one. 
{ 
    TextView scr = (TextView)findViewById(R.id.display); 
    scr.setText("." + data + "."+'\n'+"." + password.getText().toString() + "."); 
} 

문제는 사용자가 암호를 올바르게 입력해도 로그인 할 수 있다는 것입니다 디스플레이는 것을 증명한다.

또 다른 문제는 앱을 다시 실행할 때마다 작성 화면으로 이동한다는 것입니다. 즉, 파일이 존재하지 않는 것을 인식한다는 의미입니다 (방금 썼음에도 불구하고).

나는이 전체 프로젝트 파일을 처리했으며 입력 된 텍스트를 추적하여 단추를 누르면 다시 파일을 읽습니다. 닫을지라도 입력 한 내용을 추적합니다. 그러나 어떤 이유로 암호가 작동하지 않습니다. 받는

enter image description here

SOLUTION : 여기

어떻게되는지의 이미지이다 (제 .k.EditText에서 String 입력 된 사용자 "pass.txt" 파일 및 제 .k.로부터 판독 된 데이터이다) 문제 로그인 :

String values look the same but don't ".equals()" each other

,536,913,632 10

암호 사용자 입력에서 .trim() 메서드를 사용하기 만하면됩니다.

+2

암호 및 사용자 이름을 저장하려면 SharedPreferences를 사용해야한다고 생각합니다. http://developer.android.com/reference/android/content/SharedPreferences.html – Tobiel

+0

@ 토비 엘 : 나는 그가 환경 설정에서 사용자 이름을 저장해야한다고 생각한다. 패스워드와 같은 중요한 정보를 저장하는 것은 기본 설정을 읽을 수 없으므로 가능하지 않다. –

답변

2

"pass.txt"라는 파일에 암호를 저장하는 것에 대해 의견을 말하고 기술 부분에만 초점을 맞 춥니 다.

File myFile = new File(getFilesDir() + "pass.txt"); 

myFile은 유효한 파일이 아닙니다. 경로와 파일 이름 사이에 구분 기호 /이 없습니다. 그것이 결코 배제되지 않을 것이므로, 다음 줄은 그것이 존재하지 않고 전체 블록을 통과한다고 말할 것입니다.

쉽게 두 가지 방법이 하나 해결할 수 : 단순히 파일 이름에 구분 기호를 추가

File myFile = new File(getFilesDir() + "/pass.txt"); 

합니다.

File myFile = new File(getFilesDir(), "pass.txt"); 

명백한 path, file 생성자를 사용하므로 더 나은 옵션 일 수 있습니다. 어느 쪽이든 괜찮습니다.

+0

** 완벽한 ** 대답. –

+0

그게 실제로 포함되어 있는지 확인하기 위해'데이터'를 로깅하려고합니다. 올바른 값이 포함되어 있다면,'display'가 올바른 필드인지 확인하고 싶을 것입니다. 'setText()'는 작동하지 않습니다. – Geobits

+0

이해가 안됩니다. 한 파일에 쓰고 다른 파일에서 읽는 것을 보여주기 위해 편집했습니다 ('pass.txt'와'passB.txt'). 이전에 제안한 것처럼 실제로'data'의 값을 기록 했습니까? 파일에 포함 된 내용은 중요하지 않습니다. 그것이 올바르게 읽히지 않는다면, 당신이 타이핑하는 어떤 것과도 같지 않을 것입니다. 또한 줄 바꿈, 공백 등을 확인하십시오. – Geobits

0

context.openFileInput("pass.txt");을 사용하고 FileNotFoundException이 발생하면 잡을 수 있습니다.이 시점에서 파일이 실제로 존재하지 않는다고 가정 할 수 있습니다.

관련 문제