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

时间:2014-05-29 13:53:32

标签: android static-methods

使用静态和非静态方法时遇到问题。我有一个包含三个片段的项目。我想从三个片段中的每个片段中发布一些音乐。我在每个片段上都有三个单选按钮。我将媒体播放器放在一个名为global的独立类中。我使播放例程静态,所以我可以从任何一个片段调用它。我将文件名传递给播放程序。

我得到The method getResources() is undefined for the type 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()工作。所以我可以为播放器获取dataSource。

3 个答案:

答案 0 :(得分:0)

如果没有上下文,则无法调用getResources()。 所以你可以做到以下几点:

public Global(Context context) {
    this.context = context;
    context.getResources(); // etc.
}

如果您从活动中致电getResources(),您可以写信:

getResources();

因为它意味着:

Activity.this.getResources()

和活动扩展了上下文

答案 1 :(得分:0)

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

答案 2 :(得分:0)

如果您希望在片段中访问getResources(),只需在片段的任何方法中调用getActivity().getResources()

但是如果你想在Global类中封装所有这些,你可能想这样做:

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

然后在片段中使用Global.playback(getActivity());格式