代码之家  ›  专栏  ›  技术社区  ›  Burjua

从非活动类访问应用程序类

  •  1
  • Burjua  · 技术社区  · 16 年前

    在我的应用程序中,我需要一些活动可以访问的数据。我读到一个好的解决办法是 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

    如何访问变量?

    2 回复  |  直到 13 年前
        1
  •  5
  •   Thorsten Dittmar    16 年前

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

    XML解析器类不应该对它所使用的上下文以及从何处获取参数做出任何假设(您应该限制解析器仅在它可以访问 Application 实例)。解析器不应该获取它的参数,参数应该由调用者设置。

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

    在上面的例子中:

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

    你真的应该确保把“工具性的东西”和任何阻止你普遍使用它的东西分开。如果您想在另一个项目中使用XML解析器类,而您的参数不是由应用程序上下文提供的,而是由其他类提供的,会发生什么情况?