2014-01-24 106 views
0

我有一个Android库应用项目使用的Android库项目。库jar(具有.class文件)附加到项目并位于lib文件夹中。从Android JAR访问全局变量

1

我想设置变量com.utility.Commons.outgoingSIP(字符串)到位于罐内的变量。

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

2

下面是一个代码snipplet:

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)。

库和源也附否则程序将无法编译:

3

从罐内我还可以CTRL +单击Commons.outgoingSIP变量,它会带我到公共的.java。所以日食KNOWS我正在谈论的变量。

我错过了什么吗?有人可以给我一些建议。

+0

您确定它“永不改变”,而不是说改变在设置时间和尝试访问它的时间之间丢失了吗? – BRFennPocock

+0

我不确定它永远不会改变,因为我只是试图将它打印到LogCat中。您提出了一个很好的问题,即在设置时间和访问时间之间,更改可能会丢失。 – SeaRoth

+0

也许你需要一个更持久的存储机制 – BRFennPocock

回答

1

我不确定你是否可以这样做 - 也许有一些反思。不过,我确信你不想这样做。

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

在你的情况下,添加如下内容到您的库:

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

您的客户wlil打电话Config.setOutgoingSIP,和您的图书馆将使用Config.getOutgoingSIP

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

+0

谢谢你的解决方案,我会试试看。 – SeaRoth