0

Android向けに開発しているEclipse Javaでは...

Context c = getBaseContext();  // returns null
Context c = this.getBaseContext(); // throws an exception.

Context c = getApplicationContext();  // throws an exception
Context c = this.getApplicationContext();  // throws an exception.

File f = getFilesDir(); // throws an exception
File f = this.getFilesDir(); // throws an exception

ご覧のとおり、アプリケーションまたは基本コンテキストをまったく取得できません。それらなしでファイルディレクトリを取得しようとしても機能しません。どうすれば自分のファイルディレクトリにアクセスできますか?

public class SoundHandler extends Activity {
private Button mButtonPlay;
private Button mButtonDone;
// private LinearLayout mOverallView;
private PeekActivity mHome;
private MyButtonListener myButtonListener;
private MediaPlayer mPlayer; 
private File audioFilePath;

public SoundHandler(PeekActivity home) {
    mHome = home;
    myButtonListener = new MyButtonListener();
}

public void onCreate(Bundle savedInstanceState) {        
    super.onCreate(savedInstanceState);
}

public void open() {
    mHome.setContentView(R.layout.sounds);
    mButtonDone = (Button) mHome.findViewById(R.id.soundDone);     
    mButtonDone.setOnClickListener(myButtonListener);
    mButtonPlay = (Button) mHome.findViewById(R.id.playSound);     
    mButtonPlay.setOnClickListener(myButtonListener);
    mPlayer = null;

                // This is what I thought would work, but it does not
    audioFilePath = this.getBaseContext().getFilesDir().getAbsolutePath();  

                // These are my attempts to see what, if anything works and is not null
                // but I've tried all the combinations and permutations above.
    SoundHandler a = this;
    Context b = getBaseContext();
    Context c = getApplicationContext();
    File d = this.getFilesDir();

                // I'm really just trying to get access to an audio file that is included
                // in my build in file /res/raw/my_audio_file.mp3
                // mPlayer = MediaPlayer.create(this, R.raw.my_audio_file); doesn't work either
}
4

3 に答える 3

0

OK、私はこれを理解しました。私はこのようにしなければなりませんでした。

audioFilePath = mHome.getBaseContext().getFilesDir().getAbsolutePath();

ここで、「mHome」は、メインの全体的なアプリ アクティビティのハンドル (または ID、コンテキスト、または任意の名前) です。つまり、この public クラスのコンストラクターに渡されるパラメーターです。つまり、このクラスが PlayMyAudio と呼ばれていて、ファイル PlayMyAudio.java にあり、アプリのメイン アクティビティではない場合です。次に、「mHome」は関数に渡されるパラメーターです

public class PlayMyAudio extends Activity {

   public PlayMyAudio(AppNameActvity home) {
       mHome = home;
       audioFilePath = mHome.getBaseContext().getFilesDir().getAbsolutePath();  
   }

}

于 2013-07-02T20:26:56.947 に答える
0

おそらく、Activity または Service、または BroadcastReceiver を自分でインスタンス化しています。その場合、これらは Android の管理可能なオブジェクトであることを知っておいてください。単体テストを除いて、それらをインスタンス化することはできません。Android システムは、提供されたインテントに基づいてそれらをインスタンス化する責任があります。したがって、それらのコンストラクターを呼び出さないでください。「機能する」ように見えるかもしれませんが、発生しているこれらのような奇妙な副作用が表示されます。

于 2013-07-02T01:04:48.930 に答える