Rob*_*bin 0 java mobile android global android-activity
我试图使用应用程序类定义全局对象.因此,我定义了以下类.
public class MyApplication extends Application {
private MyObject myObject=new MyObject();
public MyObject getMyObject(){
return this.myObject;
}
}
Run Code Online (Sandbox Code Playgroud)
然后,我在一个活动中使用它,但是我收到一个错误(无法解析方法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();
}
});
}
}
Run Code Online (Sandbox Code Playgroud)
我不知道为什么我会收到此错误,因为例如在另一个活动中调用getApplication()时它会起作用.
我对Android和Java很陌生,所以请原谅这个问题的独创性.
UPDATE
然后我做了MyObject myObject=myApplication.getMyObject();,我没有得到任何编译问题,但应用程序在我进入该活动后立即死亡.
据我所知,不建议使用Application类进行此类使用,那么什么是一个好的替代方案呢?
你收到这个错误,因为你this.getApplication()在里面打电话View.OnClickListener.因此,this现在引用侦听器而不是活动.
要做你需要的,只需Context在你的activity的onCreate方法中创建一个侦听器之外的对象并分配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();
}
});
}
}
Run Code Online (Sandbox Code Playgroud)
问题更新后编辑: -
而不是使用应用程序类,使用static对象来实现全局变量.static对象独立于对象,可以使用它们所属的类进行引用.例如,如果您在其中定义static变量MainActivity.class并为其命名testObject,则无论您当前的活动如何,都可以使用以下代码访问该变量: -
YourObject object = MainActivity.testObject;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
81 次 |
| 最近记录: |