1

私は単純なサウンド ボードの Andriod アプリを開発しようとしています。これは、同時にではなく、一度に 1 つずつ長いサウンドを再生します。反復的なコードと多くのメディア プレーヤーを使用するサウンドボードを簡単に作成できますが、MediaPlayer のインスタンスの割り当てが多すぎるため、多くのデバイスがクラッシュする可能性があります。マップを使用してメディアプレーヤーを 1 つだけ使用したいのですが、数時間経ってもコンパイルの問題が発生します。MIT で App Inventor を使用することもできましたが、大規模なキー/署名のハックなしではそれを市場にアップロードできないと思うので、それは良い選択肢ではないと思います。

SDKに含まれているメディアプレーヤーを1つだけ使用する、またはオンラインで入手できるサウンドが2つだけの実際のコード例があるかどうかは誰にもわかりませんか? 基本的な作業設計から始めることができれば、時間を大幅に節約できます。

私のコードは次のようになります。

public class newBoard extends Activity {


int selectedSoundId; 

@Override 

public void onCreate(Bundle savedInstanceState) { 

    super.onCreate(savedInstanceState); 

*//below line causes an error due to use of "newboard"*

    setContentView(R.layout.newboard); 

    final MediaPlayer player = new MediaPlayer(); 
    final Resources res = getResources(); 

    //just keep them in the same order, e.g. button01 is tied to backtoyou 
    final int[] buttonIds = { R.id.button01, R.id.button02, R.id.button03, 
                              R.id.button04, R.id.button05, R.id.button06, 
                              R.id.button07, R.id.button08, R.id.button09, 
                              R.id.button10, R.id.button11, R.id.button12, 
                              R.id.button13, R.id.button14, R.id.button15, 
                              R.id.button16, R.id.button16, R.id.button17, 
                              R.id.button18, R.id.button19, R.id.button20, 
                              R.id.button21, R.id.button22, R.id.button23, 
                              R.id.button24, R.id.button25 }; 
    final int[] soundIds = { R.raw.sound01, R.raw.sound02, R.raw.sound03, 
                              R.raw.sound04, R.raw.sound05, R.raw.sound06, 
                              R.raw.sound07, R.raw.sound08, R.raw.sound09, 
                              R.raw.sound10, R.raw.sound11, R.raw.sound12, 
                              R.raw.sound13, R.raw.sound14, R.raw.sound15, 
                              R.raw.sound16, R.raw.sound16, R.raw.sound17, 
                              R.raw.sound18, R.raw.sound19, R.raw.sound20, 
                              R.raw.sound21, R.raw.sound22, R.raw.sound23, 
                              R.raw.sound24, R.raw.sound25 }; 

    View.OnClickListener listener = new View.OnClickListener() { 
        public void onClick(View v) { 
            //find the index that matches the button's ID, and then reset 
            //the MediaPlayer instance, set the data source to the corresponding 
            //sound effect, prepare it, and start it playing. 
            for(int i = 0; i < buttonIds.length; i++) { 
                if(v.getId() == buttonIds[i]) { 
                    selectedSoundId = soundIds[i]; 
                    AssetFileDescriptor afd = res.openRawResourceFd(soundIds[i]); 
                    player.reset(); 
                    try { 
                        player.setDataSource(afd.getFileDescriptor(), afd.getStartOffset(), afd.getLength()); 
                    } catch (IllegalArgumentException e) { 
                        // TODO Auto-generated catch block 
                        e.printStackTrace(); 
                    } catch (IllegalStateException e) { 
                        // TODO Auto-generated catch block 
                        e.printStackTrace(); 
                    } catch (IOException e) { 
                        // TODO Auto-generated catch block 
                        e.printStackTrace(); 
                    } 
                    try { 
                        player.prepare(); 
                    } catch (IllegalStateException e) { 
                        // TODO Auto-generated catch block 
                        e.printStackTrace(); 
                    } catch (IOException e) { 
                        // TODO Auto-generated catch block 
                        e.printStackTrace(); 
                    } 
                    player.start(); 
                    break; 
                } 
            } 
        } 
    }; 



    //set the same listener for every button ID, no need 
    //to keep a reference to every button 
    for(int i = 0; i < buttonIds.length; i++) { 
        Button soundButton = (Button)findViewById(buttonIds[i]); 
        registerForContextMenu(soundButton); 
        soundButton.setOnClickListener(listener); 

    } 



} 

} 

エラーが 1 つだけあります。

newboard を解決できないか、フィールドではない タイプ: Java の問題

基礎として使用できる素敵なプロジェクトのダウンロードがあれば、それが最適です!

ご指導いただきありがとうございます。

Maytag87

4

1 に答える 1

0

このエラーは、レイアウト XML ファイルが見つからないことを意味します。

ファイル/res/layout/newboard.xmlは Eclipse プロジェクトに存在しますか? おそらく、レイアウトはmain.xmlR.layout.mainのような別のものと呼ばれます。その場合、Java コードで を呼び出すときに を使用する必要がありますsetContentView()

于 2012-09-03T16:09:48.403 に答える