我花了相當多的時間在網上進行研究。但是,我無法設法讓我的Asynctask在後臺加載SoundPool聲音。我有54周的聲音,我加載它們是這樣的:如何使用Asynctask加載SoundPool聲音?
int selectHello[] = new int[4];
selectHello[0] = sp.load(this, R.raw.hello1a, 1);
selectHello[1] = sp.load(this, R.raw.hello2a, 1);
selectHello[2] = sp.load(this, R.raw.hello3a, 1);
selectHello[3] = sp.load(this, R.raw.hello4a, 1);
//and so on, 10 more times with different sounds
我需要加載它們陣列裏面,因爲我用的是隨機點擊一個按鈕後,隨機選擇一個出4(左右)。我隨機看起來是這樣的:
private void playSound(int id) {
// TODO Auto-generated method stub
int high = playList[id].length-1;
int randomNum;
do {
randomNum = (int)(Math.random()*(high-0+1))+0;
} while (randomNum == previousNum);
previousNum = randomNum;
sp.play(playList[id][randomNum], 1, 1, 0, 0, 1);
}
我創建int playList[][]
這是加載一個數組的數組(如selectHello[]
),使之清潔/簡單的找到它的聲音,我需要。
int playList[][];
playList = {selectHello, ...etc};
//And so on, 10 more times
當我使用doInBackground()
方法,它可以讓我返回1項,所以我試圖返回playList[][]
即加載的數組的數組。我有兩個問題。首先,如果我要返回playList[][]
,那麼如何才能讓我的主Activity獲取數組?我已經研究過,發現你可以用onPostExecute()
來改變UI,並且我已經看到了一些返回字符串的方法(但我並不完全理解),但不是像我的那樣的array[][]
。
我的另一個問題是,一旦我加載了SoundPool聲音,那麼另一個SoundPool可以讀取它們嗎?我不確定這些聲音是否實際加載到SoundPool本身,或者只是創建爲一個整數,當調用play()
方法時可讀。如果沒有,那麼看起來我必須同時返回一個SoundPool和一個數組才能工作。如果有人可以給我一些真實的代碼示例來解釋這個東西,那將不勝感激。
至於我在doInBackground()
方法中的實際代碼,它只包含上面第一個和第三個塊中顯示的代碼,以及創建一個SoundPool。另外,抱歉,如果有任何明顯的我做錯了/不到這裏,因爲我是新來的Java,這是我的第一個問題在StackOverflow。請讓我知道是否有任何其他信息需要您更好地回答此問題。
嘗試'AsyncTask <無效,無效,列表>' –