0

因此,我目前遇到了SharedPreferences內部的上下文問題,它說LoginActivity.this。這是我的device.java類和LoginActivity是我想從中調用此方法的活動。那麼它會像Device.This還是這些線?從活動到Java類的共享首選方法調用

方法:

public void validateLogin(String username, String password, String ipAddress) { 

    SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(LoginActivity.this); 

    if (sharedPreferences.contains("ip") && sharedPreferences.contains("username") && sharedPreferences.contains("password")) { 
     String strUsername = sharedPreferences.getString("username", username); 
     String strPassword = sharedPreferences.getString("password", password); 
     String strIpAddress = sharedPreferences.getString("ip", ipAddress); 
     //performLogin(strUsername, strPassword, strIpAddress); 
    } 
} 

public void saveSP(String username, String password, String ipAddress) { 

    SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(LoginActivity.this); 

    sharedPreferences.edit() 
      .putString("ip", ipAddress) 
      .putString("username", username) 
      .putString("password", password) 
      .commit(); 
} 

回答

1

試試這個:

public class MyActivity extends Activity{ 

    private static MyActivity activity; 

    @Override 
    protected void onCreate(Bundle savedInstanceState){ 
     super.onCreate(savedInstanceState); 

     activity = this; 

     //... 
    } 

    public static MyActivity getActivity(){ 
     return activity; 
    } 

} 

然後當你需要的上下文對象:

PreferenceManager.getDefaultSharedPreferences(MyActivity.getActivity()); 

這是我一貫的做法,當我需要之外的上下文對象Activity類。希望能幫助到你!

+0

你只需要把'activity = this;'放在onCreate的某處。我通常把它放在類的開頭,因爲它確保無論如何getActivity()都返回一個對象。 – Namnodorel

+0

乾杯乾得很好!葉我完全消失了,但你起初是正確的:S – Lotse

+0

哦,你還有一件事,你看我在哪裏註釋performLogin。這個方法也在LoginActivity中,我試圖在我的Java類中使用它。我怎樣才能做到這一點? – Lotse