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