繁体   English   中英

从活动之外的其他类访问应用程序类

[英]Access Application class from class other then Activity

在我的应用程序中,我需要一些活动可以访问的数据。 我读过一个很好的解决方案是为此使用Application类。 所以我这样使用它:

public class MyApplication extends Application {

  private String str;

  public String getStr(){
    return str;
  }
  public void setStr(String s){
    str = s;
  }
}

我可以从以下活动中访问此变量:

MyApplication appState = ((MyApplication)getApplicationContext());
String str = appState.getStr();

可以,但是我也有xml解析器类:

public class MyXMLHandler extends DefaultHandler {

如果我尝试在这里做同样的事情

    MyApplication app = ((MyApplication)getApplicationContext());
    String str = app.getStr();

我正在获取The method getApplicationContext() is undefined for the type MyXMLHandler

如何访问变量?

好吧,通常XML解析器类应该独立于任何特殊上下文。 这意味着无论开发人员正在开发应用程序,服务,库还是任何东西,开发人员都应该能够使用它。

XML解析器类不应对其在其中使用的上下文以及从中获取参数的位置做出任何假设(您必须限制解析器仅在它有权访问Application实例时才能起作用)。 解析器不应获取其参数,参数应由调用方设置。

您也不想XML解析器类向用户显示消息,对吗? 正确:“ XML解析器与用户界面有什么关系?” 相反,您将引发异常并确保异常得到正确处理,例如,取决于是否存在用户界面(记录)。

因此,您要做的就是传递构造XML解析器实例时所需的参数。 但是,您不会将应用程序实例作为参数传递(再次考虑依赖关系),而是从应用程序类传递了必要的参数。

在上面的示例中:

MyApplication app = ((MyApplication)getApplicationContext());
MyXmlHandler handler = new MyXmlHandler(app.getStr());

您应该真正确保将“工具”与任何妨碍您普遍使用的工具分开。 如果您想在另一个项目中使用XML Parser类的情况下,该项目的参数不是由应用程序上下文提供,而是由其他类提供,将会发生什么情况?

我敢肯定,您可以进行为期一周的有关面向对象设计以及应该如何做的讨论-但这基本上就是我要做的事情...

Thorsten是正确的,但是如果您仍然决定使用您的应用程序,则可以使用Singleton。

public class MyApplication extends Application {

private static MyApplication instance;

public static MyApplication getInstance() {
   if(instance == null){
      instance = new MyApplication();
   }
   return instance;
 }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM