我正在尝试使用应用程序类定义全局对象。 因此,我定义了以下类。
public class MyApplication extends Application {
private MyObject myObject=new MyObject();
public MyObject getMyObject(){
return this.myObject;
}
}
然后,我在 Activity 中使用它,但收到错误(无法解析方法 getApplication()):
public class AnActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_mood);
Button buttonMusic=(Button) findViewById(R.id.button5);
buttonMusic.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
MyApplication myApplication = ((MyApplication)this.getApplication());
Toast.makeText(MoodActivity.this, "playing music", Toast.LENGTH_SHORT).show();
}
});
}
}
我不知道为什么会收到此错误,因为它在另一个 Activity 中调用 getApplication() 时有效。
我对 Android 和 Java 还很陌生,所以请原谅这个问题的独创性。
更新
然后我执行 MyObject myObject=myApplication.getMyObject();
并且我没有遇到任何编译问题,但应用程序在我进入该 Activity 后立即终止。
据我了解,不建议使用 Application 类进行此类用途,什么是一个好的替代方案?
最佳答案
您收到此错误是因为您在 View.OnClickListener
内调用 this.getApplication()
。因此,this
现在引用监听器而不是 Activity。
要执行您需要的操作,只需在 Activity 的 onCreate
方法中的监听器外部创建一个 Context
对象,并将 this
分配给它即可。并且,在监听器内部,使用 context
而不是 this
。像这样的东西:-
public class AnActivity extends Activity {
Context context;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_mood);
context = this;
Button buttonMusic=(Button) findViewById(R.id.button5);
buttonMusic.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
MyApplication myApplication = ((MyApplication)context.getApplication());//Changed "the" to "context"
Toast.makeText(MoodActivity.this, "playing music", Toast.LENGTH_SHORT).show();
}
});
}
}
问题更新后编辑:-
不使用应用程序类,而是使用static
对象来实现全局变量。 static
对象独立于对象,可以使用它们所属的类来引用。例如,如果您在 MainActivity.class
中定义一个 static
变量并将其命名为 testObject
,则可以使用以下代码访问它:您当前的 Activity :-
YourObject object = MainActivity.testObject;
关于java - 使用 Application 类通过应用程序共享对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44875237/