2011-01-02 4 views
10

나는 이상한 문제가 있습니다. 내 응용 프로그램은 SD 카드에 간단한 텍스트 파일을 작성할 수 있지만 때로는 일부 사람들에게는 작동하지만 다른 사람들에게는 적합하지 않으며 이유가 없습니다.SD 카드에 텍스트 파일 쓰기가 실패했습니다.

일부 사용자의 경우 파일에 ...과 같은 일부 문자를 넣으면 강제로 닫힙니다. 나는 문제를 일으키지 않았으므로 그것을 재현 할 수 없다. 그러나 이것은 파일 쓰기를 처리하는 코드이다. 누구든지 문제를 일으킬 수있는 방법이나 더 나은 방법을 생각할 수 있습니까?

public void generateNoteOnSD(String sFileName, String sBody) 
{ 
    try 
    { 
     File root = new File(Environment.getExternalStorageDirectory(), "Notes"); 
     if (!root.exists()) 
     { 
      root.mkdirs(); 
     } 

     File gpxfile = new File(root, sFileName); 
     FileWriter writer = new FileWriter(gpxfile); 
     writer.append(sBody); 
     writer.flush(); 
     writer.close(); 

     Toast.makeText(this, "Saved", Toast.LENGTH_SHORT).show(); 
    } 
    catch(IOException e) 
    { 
     e.printStackTrace(); 
     importError = e.getMessage(); 
     iError(); 
    } 
} 
+0

가 안드로이드 폰 사용자의 뿌리 또는 비 뿌리 전화를 사용? –

답변

6

외부 저장소에 쓰기 가능 여부를 확인하고 있습니까? 다음 ...

Environment.getExternalStorageState() 

를 사용하지 않으면 SD 카드가 장착 된 경우에 당신에게 말할 것이다하고 쓰기의 경우도 확인할 수 있습니다. 이 시점에서 제가 생각할 수있는 전부입니다.

0

보통 FileWriter 대신 PrintWriter을 사용합니다. 나는 당신의 문제를 해결할 수 있을지 모르겠지만 더 높은 수준이므로 간단한 FileWriter보다 많은 일을 처리 할 수 ​​있습니다.

15

이 방법을 사용하여 SD 카드 상태를 확인할 수 있습니다. 토스트 대화 상자를 언어 :

** MEDIA_MOUNTED_READ_ONLY로 관리하십시오. 필요가 없습니다에서 SDCard에에서 작성하고 내가 거기에 USB를 통해 실제 장치에서 디버깅 모든 동료 초보자를 위해 진정한 **

public static Boolean comprobarSDCard(Context mContext) { 
    String auxSDCardStatus = Environment.getExternalStorageState(); 

    if (auxSDCardStatus.equals(Environment.MEDIA_MOUNTED)) 
     return true; 
    else if (auxSDCardStatus.equals(Environment.MEDIA_MOUNTED_READ_ONLY)) { 
     Toast.makeText(
       mContext, 
       "Warning, the SDCard it's only in read mode.\nthis does not result in malfunction" 
         + " of the read aplication", Toast.LENGTH_LONG) 
       .show(); 
     return true; 
    } else if (auxSDCardStatus.equals(Environment.MEDIA_NOFS)) { 
     Toast.makeText(
       mContext, 
       "Error, the SDCard can be used, it has not a corret format or " 
         + "is not formated.", Toast.LENGTH_LONG) 
       .show(); 
     return false; 
    } else if (auxSDCardStatus.equals(Environment.MEDIA_REMOVED)) { 
     Toast.makeText(
       mContext, 
       "Error, the SDCard is not found, to use the reader you need " 
         + "insert a SDCard on the device.", 
       Toast.LENGTH_LONG).show(); 
     return false; 
    } else if (auxSDCardStatus.equals(Environment.MEDIA_SHARED)) { 
     Toast.makeText(
       mContext, 
       "Error, the SDCard is not mounted beacuse is using " 
         + "connected by USB. Plug out and try again.", 
       Toast.LENGTH_LONG).show(); 
     return false; 
    } else if (auxSDCardStatus.equals(Environment.MEDIA_UNMOUNTABLE)) { 
     Toast.makeText(
       mContext, 
       "Error, the SDCard cant be mounted.\nThe may be happend when the SDCard is corrupted " 
         + "or crashed.", Toast.LENGTH_LONG).show(); 
     return false; 
    } else if (auxSDCardStatus.equals(Environment.MEDIA_UNMOUNTED)) { 
     Toast.makeText(
       mContext, 
       "Error, the SDCArd is on the device but is not mounted." 
         + "Mount it before use the app.", 
       Toast.LENGTH_LONG).show(); 
     return false; 
    } 

    return true; 
} 
+0

@Aracem ... 코드에 게시 한 영어 white 문자열을 업데이트 할 수 있습니까? 감사하지 않았습니다. – swiftBoy

+0

@RDC 완료! 빠른 번역에 대한 미안. – Aracem

+0

@Aracem .. 그래! 고맙습니다. – swiftBoy

3

를 반환 : I처럼, 당신의 dev에 PC에서 USB 케이블을 분리하는 것을 잊지 마세요 그랬어. USB가 연결되면 SD 카드를 사용할 수 없습니다. 행복한 파일 작성 중 ...

모든 휴대폰/ROM 빌드에서이 옵션이 올바르지 않습니다. CMod7과 MIUI ROMS는 위의 설정에 따라 PC에 연결했을 때 SD 카드의 장착 여부를 설정할 수 있습니다. 확인하는 것이 가장 좋습니다.

+0

HTC Wildfire에서 플러그를 꽂아두고 "충전 전용"모드를 선택하면 SD 카드가 쓰기 가능으로 마운트됩니다. 짧은 확인 메시지 "SD 카드 준비 중"을 찾으십시오. –

5

나는 방금 나의 경우에 매니페스트 파일에 <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />을 추가하지 않고 있다는 것을 알았다.

건배,

wahib

관련 문제