10

私は遭遇した奇妙な問題を抱えています。私のアプリは単純なテキストファイルを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();
    }
}   
4

5 に答える 5

15

このメソッドを使用して、de sdCard の状態を確認できます。トースト ダイアログを自分の言語に変更します。

** MEDIA_MOUNTED_READ_ONLY に注意してください。SDCardに書き込む必要はなく、trueを返します**

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;
}
于 2011-02-23T09:18:12.153 に答える
6

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

Environment.getExternalStorageState()

これにより、SD カードがマウントされているかどうかがわかり、書き込み可能かどうかも確認できます。現時点で提案できるのはこれだけです。

于 2011-01-02T22:27:10.813 に答える
5

私の場合、<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />マニフェストファイルに追加できなかったことがわかりました。

乾杯、

ワヒブ

于 2012-06-17T22:07:41.483 に答える
3

USBを介して実際のデバイスでデバッグしているすべての初心者の場合:私が行ったように、開発用PCからUSBケーブルを抜くことを忘れないでください。USBが接続されている場合、SDカードは使用できません。ハッピーファイル書き込み...

これは、すべての電話/ROMビルドで正しいわけではありません。CMod7とMIUIROMの両方で、PCに接続したときにSDカードをマウントするかどうかを設定できます。設定によっては、上記が当てはまる場合があります。チェックするのがベストです。

于 2011-05-22T20:47:19.780 に答える
0

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

于 2011-01-02T22:49:38.313 に答える