Runnable中的上下文

ogg*_*ggy 6 multithreading android media-player android-context runnable

我尝试播放R.raw的声音.在一个线程/ Runnable内但我不能让它工作.

new Runnable(){ 
  public void run() {  

    //this is giving me a NullPointerException, because getBaseContext is null  
    MediaPlayer mp = MediaPlayer.create( getBaseContext(), R.raw.soundfile);  

    while (true) {  
      if (something)  
          play something  
    }  
  }

如何在run方法中获得真正的Context?无论我尝试什么,它都是null.或者有更好的方法吗?

小智 26

您还应该能够通过使用从外部类获取此引用MainActivity.this.


And*_*wKS 13

你应该使用getBaseContext.相反,如果此runnable在一个活动中,您应该将上下文存储在类变量中,如下所示:

public class MainActivity extends Activity {
    private Context context;

    public void onCreate( Bundle icicle ) {
        context = this;


        // More Code
    }

    // More code

    new Runnable(){ 
        public void run() {  
            MediaPlayer mp = MediaPlayer.create(context, R.raw.soundfile);  

            while (true) {  
                if (something)  
                    play something  
            }  
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

此外,你不应该像一遍又一遍地播放声音那样有一个无限循环 - 那里应该有一个睡眠,以防止声音在很短的时间内反复播放,并相互重叠相同的声音.


she*_*iou 0

我想你需要创建一个线程并调用Thread.start()。