Android 无法对非静态方法进行静态引用

Android 无法对非静态方法进行静态引用,android,static-methods,Android,Static Methods,在静态和非静态方法方面有困难。我有一个有三个片段的项目。我想从这三个片段中的每一个播放一些音乐。每个片段上有三个单选按钮。我将媒体播放器放在一个单独的类中,称为“全局”。我把游戏的常规设置为静态,这样我就可以从片段中调用它。我将文件名传递给播放例程 我得到的方法getResources对于Global类型是未定义的 源代码: try { AssetFileDescriptor descriptor = getResources().getAssets().openFd(f

在静态和非静态方法方面有困难。我有一个有三个片段的项目。我想从这三个片段中的每一个播放一些音乐。每个片段上有三个单选按钮。我将媒体播放器放在一个单独的类中,称为“全局”。我把游戏的常规设置为静态,这样我就可以从片段中调用它。我将文件名传递给播放例程

我得到的方法getResources对于Global类型是未定义的

源代码:

try {
            AssetFileDescriptor descriptor = getResources().getAssets().openFd(fn);
            //AssetFileDescriptor descriptor = contex.getAssets().openFd(fn);
            player.setDataSource(descriptor.getFileDescriptor(), descriptor.getStartOffset(), descriptor.getLength());
            descriptor.close();


            FileInputStream fileInputStream = new FileInputStream(this.Context.getFilesDir().getPath() + fn);
            player.setDataSource(fileInputStream.getFD());
            //player.setDataSource(fn);
            if (playing==false){
                 player.setLooping(true);
                 player.prepare();
                 player.start();
                 playing = true;

我怎样才能让资源发挥作用。因此,我可以获取播放器的数据源。

如果没有上下文,则无法调用getResources。 因此,您可以执行以下操作:

public Global(Context context) {
    this.context = context;
    context.getResources(); // etc.
}
如果从“活动”调用getResources,则可以编写:

getResources();
因为它意味着:

Activity.this.getResources()
活动扩展了上下文

getResources方法不是静态方法,而是上下文对象中的实例方法,因此您无法静态访问它。您必须有一个上下文对象实例才能调用它。

如果您想在片段中访问getResources,您可以在片段的任何方法中调用getActivity.getResources

但是,如果您想将所有这些封装在全局类中,您可能需要这样做:

class Global {
    ...
    public static void playback(Context context) {
        // do stuff with 'context.getResources()'
    }
    ...
}

然后以Global.playbackgetActivity格式使用它;在你的片段中

你需要做一些关于java的教程,关于类、实例、静态方法的概念…@njzk2你也可以给出一些简单的提示。在这种情况下,我能想到的唯一提示是从java的基础知识开始。OP需要了解在这种情况下方法和实例之间的关系。当我向全局类添加上下文时,我会得到红色下划线。上面说这条线有多个标记。请将全局类的源代码粘贴到这里好吗?那么getActivity方法就不起作用了。我得到这个错误。getActivity方法对于Global类型是未定义的。@user3687805 getActivity是用于片段而不是全局的方法class@user3687805我还为我的答案添加了更多细节,请看!