【问题标题】:Accessing global variables from Android JAR从 Android JAR 访问全局变量
【发布时间】:2014-02-15 20:58:28
【问题描述】:

我有一个 Android 库项目,供多个 Android 应用程序项目使用。一个库 jar(具有 .class 文件)附加到项目并位于 lib 文件夹中。

我正在尝试将变量 com.utility.Commons.outgoingSIP(字符串)设置为位于 jar 内的变量。

在 Commons.java 中声明:public static String outgoingSIP = "";

这是一个代码片段:

public void sendMessage(SIPMessage sipMessage, InetAddress receiverAddress, int receiverPort)
        throws IOException {
    long time = System.currentTimeMillis();
    byte[] bytes = sipMessage.encodeAsBytes(this.getTransport());
    sendMessage(bytes, receiverAddress, receiverPort, sipMessage instanceof SIPRequest);

    Commons.outgoingSIP = receiverAddress.toString();

但变量永远不会改变。我也在顶部导入了它(import com.utility.Commons)。

还附上了库和源代码,否则程序将无法编译:

在 jar 中,我还可以 CTRL + CLICK Commons.outgoingSIP 变量,它会将我带到 commons.java。所以eclipse知道我在说哪个变量。

我错过了什么吗?谁能给我一些建议。

【问题讨论】:

  • 您确定它“从不改变”,而不是在设置它的时间和您尝试访问它的时间之间丢失了更改?
  • 我不确定它永远不会改变,因为我只是尝试将它打印到 LogCat。您提出了一个很好的问题,也许更改在设置时间和我访问它之间丢失了。
  • 或许你需要更持久的存储机制

标签: java android variables class-library


【解决方案1】:

我不确定你是否能做到这一点——也许需要反思一下。但是,我确信您不想这样做。

让库依赖于全局变量并不是一个好的库接口。不要依赖可能存在或不存在的全局变量,而是让您的库客户端专门告诉您需要知道什么。

在您的情况下,将这样的内容添加到您的库中:

public class Config {
    private static String _outgoingSIP;
    public static void setOutgoingSIP(string sip) { _outgoingSIP = sip; }
    public static String getOutgoingSIP() { return _outgoingSIP; }
}

您的客户将致电Config.setOutgoingSIP,而您的图书馆将使用Config.getOutgoingSIP

注意 - 您可以将 _outgoingSIP 设为公共静态变量,并让您的库代码直接访问它。我不太喜欢这种方法,但也许这是我的 C# 背景。

【讨论】:

  • 感谢您的解决方案,我会尝试一下。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-10-11
  • 1970-01-01
  • 1970-01-01
  • 2019-10-10
  • 2013-04-17
  • 2011-10-29
  • 1970-01-01
相关资源
最近更新 更多