Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/347.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在创建类的实例之前,如何使用实例方法?_Java_Android_Instance_Instance Methods - Fatal编程技术网

Java 在创建类的实例之前,如何使用实例方法?

Java 在创建类的实例之前,如何使用实例方法?,java,android,instance,instance-methods,Java,Android,Instance,Instance Methods,我有以下代码: public class NumbersFragment extends Fragment { /** Handles playback of all the sound files */ private MediaPlayer mMediaPlayer; private MediaPlayer.OnCompletionListener mCompletionListener = new MediaPlayer.OnCompletionListen

我有以下代码:

public class NumbersFragment extends Fragment {

    /** Handles playback of all the sound files */
    private MediaPlayer mMediaPlayer;

      private MediaPlayer.OnCompletionListener mCompletionListener = new MediaPlayer.OnCompletionListener() {
        @Override
        public void onCompletion(MediaPlayer mediaPlayer) {
            // Now that the sound file has finished playing, release the media player resources.
            releaseMediaPlayer();
        }
    };


 @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {

        View rootView = inflater.inflate(R.layout.word_list, container, false);

        // Create a list of words
        final ArrayList<Word> words = new ArrayList<Word>();
        words.add(new Word(R.string.number_one, 
                R.drawable.number_one, R.raw.number_one));
        words.add(new Word(R.string.number_two, 
                R.drawable.number_two, R.raw.number_two));
        words.add(new Word(R.string.number_three, 
                R.drawable.number_three, R.raw.number_three));
        words.add(new Word(R.string.number_four, 
                R.drawable.number_four, R.raw.number_four));
        words.add(new Word(R.string.number_five, 
                R.drawable.number_five, R.raw.number_five));
        words.add(new Word(R.string.number_six, 
                R.drawable.number_six, R.raw.number_six));
        words.add(new Word(R.string.number_seven, 
                R.drawable.number_seven, R.raw.number_seven));
        words.add(new Word(R.string.number_eight, 
                R.drawable.number_eight, R.raw.number_eight));
        words.add(new Word(R.string.number_nine, 
                R.drawable.number_nine, R.raw.number_nine));
        words.add(new Word(R.string.number_ten, 
                R.drawable.number_ten, R.raw.number_ten));

        // Create an {@link WordAdapter}, whose data source is a list of {@link Word}s. The
        // adapter knows how to create list items for each item in the list.
        WordAdapter adapter = new WordAdapter(getActivity(), words, R.color.category_numbers);

        // Find the {@link ListView} object in the view hierarchy of the {@link Activity}.
        // There should be a {@link ListView} with the view ID called list, which is declared in the
        // word_list.xml layout file.
        ListView listView = (ListView) rootView.findViewById(R.id.list);

        // Make the {@link ListView} use the {@link WordAdapter} we created above, so that the
        // {@link ListView} will display list items for each {@link Word} in the list.
        listView.setAdapter(adapter);

        // Set a click listener to play the audio when the list item is clicked on
        listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> adapterView, View view, int position, long l) {
                // Release the media player if it currently exists because we are about to
                // play a different sound file
                releaseMediaPlayer();

                // Get the {@link Word} object at the given position the user clicked on
                Word word = words.get(position);

          // Create and setup the {@link MediaPlayer} for the audio resource associated
                    // with the current word
                 mMediaPlayer = MediaPlayer.create(getActivity(), word.getAudioResourceId());

                    // Start the audio file
                    mMediaPlayer.start();

                    // Setup a listener on the media player, so that we can stop and release the
                    // media player once the sound has finished playing.
                    mMediaPlayer.setOnCompletionListener(mCompletionListener);
                }
            }
        });

        return rootView;
    }


 private void releaseMediaPlayer() {
        // If the media player is not null, then it may be currently playing a sound.
        if (mMediaPlayer != null) {
            // Regardless of the current state of the media player, release its resources
            // because we no longer need it.
            mMediaPlayer.release();

            // Set the media player back to null. For our code, we've decided that
            // setting the media player to null is an easy way to tell that the media player
            // is not configured to play an audio file at the moment.
            mMediaPlayer = null;

            // Regardless of whether or not we were granted audio focus, abandon it. This also
            // unregisters the AudioFocusChangeListener so we don't get anymore callbacks.
            mAudioManager.abandonAudioFocus(mOnAudioFocusChangeListener);
        }
    }
公共类NumbersFragment扩展片段{
/**处理所有声音文件的播放*/
私有媒体层;
私有MediaPlayer.OnCompletionListener MCCompletionListener=新MediaPlayer.OnCompletionListener(){
@凌驾
完成时的公共作废(MediaPlayer MediaPlayer){
//现在声音文件已经播放完毕,释放媒体播放器资源。
释放MediaPlayer();
}
};
@凌驾
创建视图上的公共视图(布局、充气机、视图组容器、,
Bundle savedInstanceState){
视图根视图=充气机。充气(R.layout.word\u列表,容器,false);
//创建一个单词列表
最终ArrayList单词=新ArrayList();
添加新词(R.string.number_-one,
R.drawable.number_-one,R.raw.number_-one);
添加新词(R.string.number_二,
R.drawable.number_-two,R.raw.number_-two);
添加新词(R.string.number_三,
R.drawable.number_三,R.raw.number_三);
添加新词(R.string.number_-four,
R.drawable.number_-four,R.raw.number_-four);
添加新词(R.string.number_五、,
R.drawable.number_-five,R.raw.number_-five);
添加新词(R.string.number_六,
R.drawable.number_六,R.raw.number_六);
添加新词(R.string.number_七,
R.drawable.number_-seven,R.raw.number_-seven);
words.add(新词)(R.string.number_八,
R.drawable.number_八,R.raw.number_八);
添加新词(R.string.number_九、,
R.drawable.number_-nine,R.raw.number_-nine);
添加新词(R.string.number_十、,
R.drawable.number_-ten,R.raw.number_-ten);
//创建一个{@link WordAdapter},其数据源是{@link Word}的列表
//适配器知道如何为列表中的每个项创建列表项。
WordAdapter=新的WordAdapter(getActivity(),words,R.color.category_number);
//在{@link Activity}的视图层次结构中查找{@link ListView}对象。
//应该有一个{@link ListView},其视图ID为list,在
//word_list.xml布局文件。
ListView ListView=(ListView)rootView.findViewById(R.id.list);
//使{@link ListView}使用我们在上面创建的{@link WordAdapter},以便
//{@link ListView}将显示列表中每个{@link Word}的列表项。
setAdapter(适配器);
//设置单击侦听器,以便在单击列表项时播放音频
setOnItemClickListener(新的AdapterView.OnItemClickListener(){
@凌驾
公共虚线单击(AdapterView AdapterView,视图视图,内部位置,长l){
//如果媒体播放器当前存在,请释放它,因为我们即将
//播放不同的声音文件
释放MediaPlayer();
//在用户单击的给定位置获取{@link Word}对象
Word=words.get(位置);
//为关联的音频资源创建并设置{@link MediaPlayer}
//用现在的词
mMediaPlayer=MediaPlayer.create(getActivity(),word.getAudioResourceId());
//启动音频文件
mmediplayer.start();
//在媒体播放器上设置一个侦听器,以便我们可以停止并释放
//播放完声音后,使用媒体播放器。
mmediplayer.setOnCompletionListener(mcCompletionListener);
}
}
});
返回rootView;
}
私有void releaseMediaPlayer(){
//如果媒体播放器不为空,则它当前可能正在播放声音。
if(mmediplayer!=null){
//无论媒体播放器的当前状态如何,请释放其资源
//因为我们不再需要它了。
mmediplayer.release();
//将媒体播放器设置回null。对于我们的代码,我们决定
//将媒体播放器设置为null是判断媒体播放器
//当前未配置为播放音频文件。
mmediplayer=null;
//不管我们是否被授予音频聚焦,放弃它。这也是
//注销AudioFocusChangeListener,这样我们就不会再收到回调。
mAudioManager.AudioFocus(mOnAudioFocusChangeListener);
}
}

如果您查看上面的代码,您会注意到有一个
releaseMediaPlayer()
方法,在创建
MediaPlayer
类的实例之前,我在这个方法中调用了
mMediaPlayer.release()
,代码工作没有错误,那么,在从您的代码中创建类的实例之前,如何调用实例方法呢???

,您可以检查MMEDIPLAYER!=无效的如果您没有mediaplayer实例,那么如果条件和mMediaPlayer.release()不执行,您将不会通过

private void releaseMediaPlayer() {
    // If the media player is not null, then it may be currently playing a sound.
    if (mMediaPlayer != null) {
        // Regardless of the current state of the media player, release its resources
        // because we no longer need it.
        mMediaPlayer.release();

        // Set the media player back to null. For our code, we've decided that
        // setting the media player to null is an easy way to tell that the media player
        // is not configured to play an audio file at the moment.
        mMediaPlayer = null;

        // Regardless of whether or not we were granted audio focus, abandon it. This also
        // unregisters the AudioFocusChangeListener so we don't get anymore callbacks.
        mAudioManager.abandonAudioFocus(mOnAudioFocusChangeListener);
    }

您有一个
null
检查。即使在您调用
releaseMediaPlayer()
时未创建
mMediaPlayer
,它也不会崩溃,因为不会调用
mMediaPlayer.release()
。没有代码工作,也没有任何错误或问题,因此如何调用release();方法,即使没有实例,例如,如果我想调用TextView类中的setText()方法,我应该先在引用变量中保留TextView的引用,然后才能使用它的方法,但在我的示例中,即使mMediaPlayer=null,我也可以调用MediaPlaye