【问题标题】:System services not available to Activities before onCreate()?系统服务在 onCreate() 之前对活动不可用?
【发布时间】:2015-10-02 13:14:38
【问题描述】:

目前我正在尝试制作媒体播放器,并尝试从我创建的活动类中调用 updateMusic 方法,并将其显示到 listFragemnt 类中

但我不断收到此错误,我不知道如何使它工作 我最近在活动中格式化了整个应用程序,它工作得非常好,所以我试图将它格式化为片段,这样我就可以添加一个用于滑动的 viewpager,但除此之外

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)

【问题讨论】:

    标签: java android android-fragments


    【解决方案1】:

    这是因为 Android 操作系统首先实例化 Activity,然后进行一些额外的设置以提供该 Activity 的基本 Context 和环境信息。这些对于访问像LayoutInflater 这样的系统服务是必要的,这是ArrayAdapter 在构建过程中试图访问的。

    您的代码在声明它们的同一行中包含对成员变量的赋值。这些分配发生在构造时(它们也可能在您的 Activity 的构造函数中),即在操作系统完成 Activity 设置之前。您需要将这些分配移至onCreate() 或更高版本。

    【讨论】:

      猜你喜欢
      • 2011-08-19
      • 1970-01-01
      • 1970-01-01
      • 2014-06-19
      • 2012-12-05
      • 2013-08-29
      • 1970-01-01
      • 2015-06-12
      • 2012-07-23
      相关资源
      最近更新 更多