音楽アプリケーション(シーケンサー)の場合、いくつかのボタンがあります
static ArrayList<Button> Buttonlist = new ArrayList<Button>();
Buttonlist.add(0,(Button) findViewById(R.id.case_kick1));
Buttonlist.add(1,(Button) findViewById(R.id.case_kick2));
Buttonlist.add(2,(Button) findViewById(R.id.case_kick3));
Buttonlist.add(3,(Button) findViewById(R.id.case_kick4));
Buttonlist.add(4,(Button) findViewById(R.id.case_kick5));
Buttonlist.add(5,(Button) findViewById(R.id.case_kick6));
Buttonlist.add(6,(Button) findViewById(R.id.case_kick7));
Buttonlist.add(7,(Button) findViewById(R.id.case_kick8));
たとえば、onClickListenersを介してアクティブ化します
Buttonlist.get(0).setActivated(true);
ループとifsを介してアクティブ化されたサウンドを再生しました:
if (Buttonlist.get(k).isActivated()) {mSoundManager.playSound(1); Thread.sleep(250);}
アプリは正常に再生されましたが、再生中に再生/一時停止ボタンにアクセスできませんでした。AsyncTasksを検索して見つけました。
ネストされたクラスPlayPauseがあります:
class PlayPause extends AsyncTask<ArrayList<Button>,Integer,Void>
私はこれを持っています:
protected Void doInBackground(ArrayList<Button>... params) {
for(int k=0;k<8;k++)
{
boolean isPlayed = false;
if (Buttonlist.get(k).isActivated()) {
mSoundManager.playSound(1);
isPlayed = true;
try {Thread.sleep(250);
}
catch (InterruptedException e)
{e.printStackTrace();}}
if(!isPlayed){
try {Thread.sleep(250);}
catch (InterruptedException e)
{e.printStackTrace();}
}
}
return null;
}
経由で起動します
Play.setOnClickListener(new PlayClickListener());
PlayClickListenerを使用:
public class PlayClickListener implements OnClickListener {
private Tutorial acti;
public PlayClickListener(){
super();
}
@SuppressWarnings("unchecked")
public void onClick(View v) {
if(Tutorial.play==0){
Tutorial.play=1;
Tutorial.Play.setBackgroundResource(R.drawable.action_down);
acti = new Tutorial();
Tutorial.PlayPause myPlayPause = acti.new PlayPause();
myPlayPause.execute(Tutorial.Buttonlist);
}
else
{
Tutorial.play=0;
Tutorial.myPlayPause.cancel(true);
Tutorial.Play.setBackgroundResource(R.drawable.action);
}
}
}
しかし、それは機能しません。ボタンをクリックして[再生/一時停止]をタッチすると、次のようになります。
07-02 11:06:01.350: E/AndroidRuntime(7883): FATAL EXCEPTION: AsyncTask #1
07-02 11:06:01.350: E/AndroidRuntime(7883): Caused by: java.lang.NullPointerException
07-02 11:06:01.350: E/AndroidRuntime(7883): at com.Tutorial.Tutorial$PlayPause.doInBackground(Tutorial.java:603)
07-02 11:06:01.350: E/AndroidRuntime(7883): at com.Tutorial.Tutorial$PlayPause.doInBackground(Tutorial.java:1)
そして、私はこのエラーを取り除く方法がわかりません。明らかに、リストが静的であっても、非同期タスクはボタンリストがアクティブ化されたステータスを検出しません。これらのボタンの状態にアクセスする方法がわかりません。isPressedも機能しません。
読んでくれてありがとう!