2012-07-12 26 views
0
import android.content.Context; 
import android.content.SharedPreferences; 
import android.net.Uri; 

public class LoadSettings 
{ 
public static void LoadMySettings (Context ctx) 
{ 
SharedPreferences sharedPreferences = ctx.getSharedPreferences("MY_SHARED_PREF", 0); 
String strSavedMem1 = sharedPreferences.getString("gSendTo", ""); 
String strSavedMem2 = sharedPreferences.getString("gInsertInto", ""); 
String cCalId = sharedPreferences.getString("gCalID", ""); 

setInsertIntoStr(strSavedMem2); 
setSendToStr(strSavedMem1); 
} 

private static String cSendToStr; 
private static String cInsertIntoStr; 
private int cCalId; 
private Uri cCalendars; 

public String getSendToStr() 
{ 
    return this.cSendToStr; 
} 
public static void setSendToStr(String pSendToStr) 
{ 
    cSendToStr = pSendToStr; 
} 
public String getInsertIntoStr() 
{ 
return this.cInsertIntoStr; 
} 

public static void setInsertIntoStr(String pInsertIntoStr) 
{ 
cInsertIntoStr = pInsertIntoStr; 
} 

} 

來自調用類我嘗試了很多當前是。我該如何訪問此類

LoadSettings.LoadMySettings(this); 

但是當我嘗試獲取一些數據爲例。

textSavedMem1.setText(LoadSettings.getSendToStr()); 

我得到一個空錯誤。

回答

4

LoadMySettings不是一個類,而是一種方法(所以如果您遵循Oracle/Sun的Java語言的命名約定,它應該以小寫開頭)。

您確實通過調用LoadSettings.loadMySettings(someContext)來訪問它,其中someContext是要傳遞的上下文。在你的例子中,我們不知道this是指什麼,所以也許你的錯誤在那裏。


然後,當你這樣做:textSavedMem1.setText(LoadSettings.getSendToStr());

你調用一個非靜態方法,所以這應該是要麼使用LoadSettings一個實例,或者更可能考慮你的代碼,你可以改變getSendToStr是:

public static String getSendToStr() 
    { 
     return cSendToStr; 
    } 

雖然這似乎是相當不好的設計。

也許如果您告訴我們更多關於您嘗試做的事情,我們可以提供更多幫助,因爲我們的答案只會讓您更進一步。


編輯:好吧,我只是想出了什麼你試圖做...

你需要回去和學習基本的Java概念訪問修飾符閱讀構造函數首先,和Java中的OO語義一般。

類改成這樣:

public class LoadSettings 
{ 
    public LoadSettings(Context ctx) 
    { 
     SharedPreferences sharedPreferences = 
      ctx.getSharedPreferences("MY_SHARED_PREF", 0); 
     String strSavedMem1 = sharedPreferences.getString("gSendTo", ""); 
     String strSavedMem2 = sharedPreferences.getString("gInsertInto", ""); 
     String cCalId = sharedPreferences.getString("gCalID", ""); 

     setInsertIntoStr(strSavedMem2); 
     setSendToStr(strSavedMem1); 
    } 

    private String cSendToStr; 
    private String cInsertIntoStr; 
    private int cCalId; 
    private Uri cCalendars; 

    public String getSendToStr() 
    { 
     return cSendToStr; 
    } 

    public void setSendToStr(String pSendToStr) 
    { 
     cSendToStr = pSendToStr; 
    } 

    public String getInsertIntoStr() 
    { 
     return cInsertIntoStr; 
    } 

    public void setInsertIntoStr(String pInsertIntoStr) 
    { 
     cInsertIntoStr = pInsertIntoStr; 
    } 

} 

,創造LoadSettings新實例:

LoadSettings mySettings = new LoadSettings(someContext); 

然後,您可以正確地調用:

textSavedMem1.setText(mySettings.getSendToStr()); 
+0

我非常感謝您的回覆,沒有任何例外,但沒有。我有幾本關於Java的書,並會嘗試找到你所談論的領域並閱讀更多內容。這對我來說很難,因爲閱讀困難是很難的(奇怪的乾草因爲我編程)。我發現電腦很棒,因爲他們只是等着你寫下來。 – John 2012-07-12 23:34:46

+0

再次感謝您的幫助。 – John 2012-07-12 23:37:06

+0

我已經找到關於「構造函數」的信息,現在理解「爲什麼如此」再次感謝你。 – John 2012-07-13 01:23:55

1

Haylem有權的,但我只是想添加一條評論:

Java中基本上有兩種設計模式用於你想要做的事情。一個是靜態類,其中所有的方法和變量都是靜態的,你可以像訪問它們一樣訪問它們。

LoadSettings.loadMySettings(this); 
string = LoadSettings.getSendToStr() 
// etc. 

另一個模式是創建類的只有一個實例的「單身」級和你訪問實例:

LoadSettings ls = new LoadSettings(this); 
ls.loadMySettings(); 
string = ls.getSendToStr(); 

無論哪種方式是好的,但你正在做的是這兩種方法的混雜,它不會工作。

+0

謝謝你的幫助。 – John 2012-07-12 23:36:50