java - 使用 Application 类通过应用程序共享对象

标签 java android android-activity mobile global

我正在尝试使用应用程序类定义全局对象。 因此,我定义了以下类。

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/

相关文章:

php - 在 Android 中将 Retrofit 发布到 Rest 服务器

java - 获取每个 Activity 的网络状态

java - 为什么当我将实体转换为 Json 时,LocalDate 格式会发生变化?

java - 这个设计得好吗?这些参数是否正确应用?

android - Channels 是发送/处理从 View 模型到 fragment/Activity 的一次性事件的最佳选择吗?

android - 将整数数组从 AppWidget 传递到预先存在的 RemoteViewsService 以由 RemoteViewsFactory 呈现

java - 非 Activity 类中的 getSharedPreferences 错误

Android:在另一个 Activity 中重用存储为局部变量的 Activity

java - 从一项 Activity 转移到另一项 Activity 时如何保留 editText 输入?

java - JSF 包加载失败