2015-07-14 3 views
2

В настоящее время я пытаюсь создать медиаплеер, и я пытаюсь вызвать метод updateMusic из класса активности, который я создал, и это отображает его в списокFragemnt классСистемные службы недоступны для деятельности до onCreate()?

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

MediaActivity class

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) 

ответ

0

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

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

Смежные вопросы

 Смежные вопросы