使用静态和非静态方法时遇到问题。我有一个包含三个片段的项目。我想从三个片段中的每个片段中发布一些音乐。我在每个片段上都有三个单选按钮。我将媒体播放器放在一个名为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。
答案 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());
格式