1

私は Android 開発の初心者です。私は子供たちが読むのを助けるために小さなフラッシュカードアプリを構築してきました.私が達成しようとしている最終的なタスクは、テキストファイルの内容を読み取り、それを配列に分割し、それらの単語の1つを画面に表示することです. 比較的単純。

私が抱えている問題は、変数を使用して raw または assets フォルダーの .txt ファイルを開こうとすることです。私は多くの例を調査し、指示されましたが、ここで何をすべきかを理解していないと思います。

以下は、私が過去 12 時間にわたって行ったさまざまな試みです。私は本当にここでいくつかのラメン用語のヘルプと指示を使用できます. 何が間違っているのかわかりません。

// variable for files  in 'raw' directory
Integer[] fileList = { R.raw.animals, R.raw.colors, R.raw.fullwords, R.raw.numbers, R.raw.shapes };



// this is the portion that picks the word and plays the associated audio file
try {
       fileStream = getResources().openRawResource(R.raw.fullwords);
       fileLen = fileStream.available();

       // Read the entire resource into a local byte buffer.
       byte[] fileBuffer = new byte[fileLen];
       fileStream.read(fileBuffer);
       fileStream.close();

       // build text file contents to an array
       displayText = new String(fileBuffer);
       listArray = displayText.split(",");

       // pick a random number
       maxNumber = listArray.length;
       randomNo = 0 + (int)(Math.random() * ((maxNumber - 0) + 1));

       // post to textView of 'textofWord'
       textofWord.setText("");

       // listArray[randomNo]
       textofWord.setText(listArray[randomNo]);

       // create audio file name
       audioFileName = listArray[randomNo] + ".mp3";
       audioFileLocation = "/raw/" + listArray[randomNo];

       // launch the audio file - using SoundPool so it can be clicked multiple times - quickly if they like :)
       wordSound = new SoundPool(5, AudioManager.STREAM_MUSIC, 0);

       // replace "grenade" with listArray[randomNo] when the audio files are made
       int sound_id = this.getResources().getIdentifier("grenade", "raw", this.getPackageName());
       audioWord = wordSound.load(this, sound_id, 1);

        } catch (IOException e) {
          // exception handling
        e.printStackTrace();
        }

私も試してみました....

fileStream = getResources().openRawResource(fileList[trigger]);
fileLen = fileStream.available();

fileList は int 配列であり、トリガーは if else if デザインで作成された int です。

...試してみることも....

int id = this.getResources().getIdentifier(value, "raw", this.getPackageName());
fileStream = getResources().openRawResource(id);
fileLen = fileStream.available();

...これにより、適切なアクティビティをロードできますが、テキストビューに表示されるテキストは「0」だけです

String FILENAME = value + ".txt";
String collected = null;
FileInputStream fis = null;

// this is the portion that picks the word and plays the associated audio file
try {
fis = openFileInput(FILENAME);
byte[] dataArray = new byte[fis.available()];
while (fis.read(dataArray) != -1) {
collected = new String(dataArray);
}

       // build text file contents to an array
       // displayText = new String(fileBuffer);
       listArray = collected.split(",");

       // pick a random number
       maxNumber = listArray.length;
       randomNo = 0 + (int)(Math.random() * ((maxNumber - 0) + 1));

       // post to textView of 'textofWord'
       textofWord.setText("");

       // listArray[randomNo]
       textofWord.setText(listArray[randomNo]);

try catch フレームワークを再配置しようとしましたが、何もしませんでした。変数に基づいてファイルをロードすることはまったく不可能だと感じ始めています....

String FILENAME = value + ".txt";
String collected = null;
FileInputStream fis = null;

// this is the portion that picks the word and plays the associated audio file
try {
fis = openFileInput(FILENAME);
byte[] dataArray = new byte[fis.available()];
while (fis.read(dataArray) != -1) {
collected = new String(dataArray);
}

        } catch (FileNotFoundException e) {
        e.printStackTrace();

} catch (IOException e) {
          // exception handling
        e.printStackTrace();

        }   finally {
        try {
        fis.close();

           // build text file contents to an array
           // displayText = new String(fileBuffer);
           listArray = collected.split(",");

           // pick a random number
           maxNumber = listArray.length;
           randomNo = 0 + (int)(Math.random() * ((maxNumber - 0) + 1));

           // post to textView of 'textofWord'
           textofWord.setText("");

           // listArray[randomNo]
           textofWord.setText(collected);

           // create audio file name
           audioFileName = listArray[randomNo] + ".mp3";
           audioFileLocation = "/raw/" + listArray[randomNo];

           // launch the audio file - using SoundPool so it can be clicked multiple times -             quickly if they like :)
           wordSound = new SoundPool(5, AudioManager.STREAM_MUSIC, 0);

           // replace "grenade" with listArray[randomNo] when the audio files are made
           int sound_id = this.getResources().getIdentifier("grenade", "raw", this.getPackageName());
           audioWord = wordSound.load(this, sound_id, 1);

        } catch (IOException e) {
        e.printStackTrace();
        }
        }

これを爆破して本当に申し訳ありませんが、変数を使用してファイル名をロードする方法について本当に迷っています。私はphp、sql、いくつかのc ++などの他のプログラミング言語を使用しましたが、変数を使用してファイルを呼び出すのは非常に簡単です。

私は何が欠けていますか?このプロセスで何が理解できませんか?

これをよりよく理解するのに役立つ指示や情報は、永遠に高く評価されます.

ありがとう、ニック

4

1 に答える 1

1

私は次のコードを書きましたが、それは私にとってはうまくいきます。特定のファイルIDを使用してアプリケーションでこのコードを実行し、データを取得するかどうかを確認します-

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    try {
        //store the ids into array, put your corresponding raw file ids
        int[] resources = {R.raw.hel};
        InputStream is = getResources().openRawResource(resources[0]);
        Log.d("demo" , "available bytes = " + is.available());
        byte[] buffer = new byte[100];
        int readCount = is.read(buffer);
        Log.d("demo", "Read data = "+new String(buffer, 0, readCount));
    } catch (IOException e) {
        e.printStackTrace();
    }
}
于 2013-09-25T19:30:33.343 に答える