我花了相当多的时间在网上进行研究。但是,我无法设法让我的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 <无效,无效,列表>' –