0

번호 : 처음 두 Log.e() 통화 인쇄 주소Android 앱의 저작물에 파일을 읽고 쓰는 것이 잘못된 이유는 무엇입니까? 제

AssetManager mgr = DeviceListActivity.this.getApplicationContext().getAssets(); 

try { 
    Log.e("Glenn:", address); 
    FileOutputStream fout = mgr.openFd("device/device_address.txt").createOutputStream(); 
    PrintWriter _fout = new PrintWriter(fout); 
    _fout.println(address); 
    Log.e("Glenn", address); 

    _fout.close(); 
    fout.close(); 

    InputStream fin = mgr.open("device/device_address.txt"); 
    BufferedReader br = new BufferedReader(new InputStreamReader(fin)); 
    address = br.readLine(); 

    try { 
     Log.e("Glenn:", address); 
    } catch (NullPointerException e) { 
     e.printStackTrace(); 
    } 
} catch (IOException e) { 
    e.printStackTrace(); 
    Log.e("Glenn", "error with OutputStream"); 
} 

값은 실제로 디바이스 MAC 주소 올바른 값이다. 그러나 방금 썼던 파일에서 읽은 주소 값을 테스트하려고 시도했을 때 NullPointerExceptionLog.e() 호출 내에서 발견되었습니다. 즉, 파일에서 읽은 값이 NULL입니다. 코드의 문제점을 지적 할 수 있습니까?

+0

데이터를 쓰거나 기존의 Assets/raw 파일을 변경할 수 있습니까? 나는 그것이 포장 (. apk)이고 크기가 확장되지 않기 때문에 가능하지 않다라고 생각한다. –

답변

5

앱의 저작물 파일에 쓸 수 없습니다. 읽기 권한 만 있지만 쓰기 권한은 가지고 있지 않습니다. AssetManager은 앱의 애셋 폴더에서 파일을 읽는 방법 만 제공합니다.

+0

그래서 앱을 다시 시작할 때 사용하기위한 데이터를 어떻게 저장할 수 있습니까? 이 경우 장치의 MAC 주소를 저장하고 싶습니다. – user1437534

+1

@ user1437534 영구 저장을위한 여러 옵션이 있습니다. 문서 도구 : http://developer.android.com/guide/topics/data/data-storage.html –