2014-01-24 104 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