Системные службы недоступны для Активности до onCreate()?

В настоящее время я пытаюсь сделать медиаплеер, и я пытаюсь вызвать метод updateMusic из созданного мной класса активности, который делает это, и показать его в классе listFragemnt.

но я продолжаю получать эту ошибку, и я не уверен, как заставить это работать. У меня недавно было полностью отформатировано все приложение в Деятельности, и оно работало отлично, поэтому я пытаюсь отформатировать его во фрагменты, чтобы я мог добавить просмотрщик для просмотра, но это кроме точка

Класс MediaActivity

 public class MediaActivity extends ListActivity {
    Uri uri = Uri.parse(Environment.getExternalStorageDirectory() + "/");
    public Uri uriMusic = Uri.parse("/storage/emulated/0/MUSIC/");
    public Uri uriVideo = Uri.parse("/storage/emulated/0/VIDEOS/");
    private static final String SD_PATH = new String(Environment.getExternalStorageDirectory().getPath() + "/");
    public static final String MUSIC_PATH = new String("/storage/emulated/0/MUSIC/");
    public static final String VIDEO_PATH = new String("/storage/emulated/0/VIDEOS/");

     public List<String> videos = new ArrayList<String>();
    public List<String> songs = new ArrayList<String>();
    private MediaPlayer mp = new MediaPlayer();
 public void updateMusic() {

        File home = new File(MUSIC_PATH);
        if (home.listFiles(new mp3Filter()).length > 0) {
            for (File file : home.listFiles(new mp3Filter())) {
                songs.add(file.getName());
            }
            ArrayAdapter<String> songList = new ArrayAdapter<String>(this, R.layout.song_item, songs);
            setListAdapter(songList);


        }
    }

тогда это класс CategorySong, который расширяет фрагмент для отображения списка

    public class CategorySongs extends ListFragment {
    MediaActivity mediaActivity;

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

        container.removeAllViews();

        mediaActivity = new MediaActivity();
        mediaActivity.updateMusic();
        mediaActivity.buttons();

        return inflater.inflate(R.layout.activity_media, container, false);


    }


}

Но я просто получаю эту ошибку

07-13 20:54:26.701    7281-7281/com.example.mason.mediaplayer E/MediaPlayer-JNI﹕ QCMediaPlayer mediaplayer NOT present 07-13 20:54:26.711    7281-7281/com.example.mason.mediaplayer E/AndroidRuntime﹕ FATAL EXCEPTION: main
Process: com.example.mason.mediaplayer, PID: 7281
java.lang.IllegalStateException: System services not available to Activities before onCreate()
        at android.app.Activity.getSystemService(Activity.java:5259)
        at android.widget.ArrayAdapter.init(ArrayAdapter.java:310)
        at android.widget.ArrayAdapter.<init>(ArrayAdapter.java:153)
        at com.example.mason.mediaplayer.MediaActivity.updateMusic(MediaActivity.java:287)
        at com.example.mason.mediaplayer.CategorySongs.onCreateView(CategorySongs.java:28)

1 ответ

Это связано с тем, что ОС Android сначала создает экземпляр Activity, а затем выполняет некоторые дополнительные настройки, чтобы предоставить базовый контекст и информацию о среде для Activity. Они необходимы для доступа к системным службам, таким как LayoutInflaterчто является ArrayAdapter пытается получить доступ во время его строительства.

Ваш код включает в себя присваивания переменным-членам в той же строке, в которой вы их объявляете. Эти назначения выполняются при построении (они могут также находиться внутри конструктора вашей Деятельности), то есть до того, как ОС завершит настройку Деятельности. Вы должны переместить эти назначения в onCreate() или позже.

Другие вопросы по тегам