我目前正在尝试构建一个必须专门使用异步任务的应用程序。根据我的理解,异步任务将运行代码而不管正在生成的UI,但是当我看到它实现时,它必须在onStart,onResume方法中实现,这些方法不可避免地绑定到一个Activity。不确定我是否弄错了。此外,尝试运行我的类,即音乐播放器类,但它仍然停留在声明媒体播放器,这是从我的代码实际工作的另一个语句复制和粘贴。这是代码:
package mt.edu.mcast.clickermaster;
import android.media.MediaPlayer;
import android.os.AsyncTask;
public class MusicPlayer extends AsyncTask<Void, Void, Void>{
@Override
protected void onPreExecute(){
super.onPreExecute();
}
@Override
protected Void doInBackground(Void... params) {
MediaPlayer player = MediaPlayer.create(this,R.raw.FluteMusic);
player.setLooping(true);
player.setVolume(1.0f,1.0f);
player.start();
return null;
}
@Override
protected void onPostExecute(Void result){
super.onPostExecute(result);
}
}
错误是说“无法解析方法'创建(MusicPlayer,int)”,是的,我在原始文件夹中有'FluteMusic'
我感谢任何愿意伸出援手的人:)
答案 0 :(得分:0)
MediaPlayer.create(this,R.raw.FluteMusic);
返回“无法解析方法'create(MusicPlayer,int)”,因为您传递的第一个元素this
是对AsyncTask的引用,并且MediaPlayer类中没有将AsyncTask作为AsyncTask的方法一个参数。
我猜你要做的就是将Context作为参数传递。你可以在AsyncTask中有一个构造函数,以保持对Context的引用。
public class MusicPlayer extends AsyncTask<Void, Void, Void>{
Context mContext;
public MusicPlayer(Context context){
mContext = context;
}
@Override
protected void onPreExecute(){
super.onPreExecute();
}
@Override
protected Void doInBackground(Void... params) {
MediaPlayer player = MediaPlayer.create(mContext, R.raw.FluteMusic);
player.setLooping(true);
player.setVolume(1.0f,1.0f);
player.start();
return null;
}
@Override
protected void onPostExecute(Void result){
super.onPostExecute(result);
}