2011-01-02 16 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

ですAndroid携帯電話あなた根ざしまたは非根ざし電話を使用していますか? –

答えて

6

外部ストレージに書き込み可能であることを確認していますか?そうでない場合は、お試しください...

これは、SDカードがマウントされていて、書き込み可能かどうかを確認することもできます。それは私がこの時点で提案しようと考えることができるすべてです。

0

私は通常、FileWriterではなくPrintWriterを使用します。私はそれがあなたの問題を解決するかどうかはわかりませんが、それは単純なFileWriterよりも多くのことを世話できるように、より高いレベルです。

15

このメソッドを使用すると、sdCard状態を確認できます。トーストダイアログを言語に変更してください:

** MEDIA_MOUNTED_READ_ONLYで気をつけてください。不要でSDカードに書いて、私はそこに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 ...コードに投稿した英語の文字列を更新してもらえますか?ありがとうございました – swiftBoy

+0

@RDC完了!素早い翻訳のために申し訳ありません – Aracem

+0

@Aracem ..ええ!ありがとうございます:) – swiftBoy

3

を返す:私のように、あなたの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