2012-10-02 32 views
2

我已經在一個活動創建的sharedpreferences數據,是否有可能在另一個活動中使用?如果是的話,這是如何實現的?android:sharedpreferences可用於跨活動?

的4名球員的名字保存在NameIndex.java,我想用的4名球員的名字保存在MainActivity.java

在NameIndex.java:

private void SaveNamesToFile(String Game1, String P1Name, String P2Name, String P3Name, String P4Name) 
    // save the new row to the file, then refresh all Buttons 
    { 
     // originalScore will be null if we're modifying a slot that is existing already  
     String originalNameP1 = SavedNameP1.getString(Game1, null); // to return null if this preference does not exist. 
     String originalNameP2 = SavedNameP2.getString(Game1, null); 
     String originalNameP3 = SavedNameP3.getString(Game1, null); 
     String originalNameP4 = SavedNameP4.getString(Game1, null); 

     // get a SharedPreferences.Editor to store new row data 
     SharedPreferences.Editor preferencesEditorP1 = SavedNameP1.edit(); 
     SharedPreferences.Editor preferencesEditorP2 = SavedNameP2.edit(); 
     SharedPreferences.Editor preferencesEditorP3 = SavedNameP3.edit(); 
     SharedPreferences.Editor preferencesEditorP4 = SavedNameP4.edit(); 

     preferencesEditorP1.putString(Game1, P1Name); 
     preferencesEditorP2.putString(Game1, P2Name); 
     preferencesEditorP3.putString(Game1, P3Name); 
     preferencesEditorP4.putString(Game1, P4Name); 

     preferencesEditorP1.apply(); 
     preferencesEditorP2.apply(); 
     preferencesEditorP3.apply(); 
     preferencesEditorP4.apply(); 
    } 
+0

你嘗試過什麼?在一個或多個活動中使用共享首選項不會產生任何影響 – njzk2

回答

0

我用一個SharedPreferences活動之間的文件,但我所做的就是用不同的私有聲明相同的文件名兩個活動中的變量。您可以在following link中查看我的代碼。我不明白的是爲什麼你使用4個SharedReferences文件只是爲了玩家的名字而不是僅僅一個文件中的所有名字。這是可能的,因爲我用它來保存2個以上的變量。

+0

我,使用一個sharedpreference(SP)曾經使用過,即,一個鍵(時隙#),用於存儲4個變量(玩家的分數在該特定時隙)而失敗。這是因爲「SharedPreferences解決方案像一張地圖一樣工作,一個VALUE到一個KEY」。我也在http://stackoverflow.com/questions/12438514/android-sharepreference上提過這樣的問題。也許編碼可以進一步修改,使得1個SP使用1個密鑰進行4個分數,但是把它簡單化並且不被阻塞,然後我定義了4個SP。你能提供一些建議嗎?所有的一切真的非常感謝您的建議〜 – pearmak

+0

@pearmak,我覺得你有2種選擇: - 如果你想使用SharedPreferences繼續使用字符串作爲字符數組或具有指標各領域的純文本。這件事情我想這樣做,因爲這是真的,在SharedPreferences編輯器的功能.putString只需用2個值的工作:要救場,並要在其存儲值的名稱。 - 如果您要訪問的數據dinamycally像一個數據庫,然後使用SQLite。 –

0

是的,他們可以在整個活動中共享。最簡單的途徑是隻使用:

context.getDefaultSharedPreferences() 
+0

會有任何示例嗎? – pearmak

0

我使用它像這樣

 public class SharedPreferencesHelper { 

     SharedPreferences myPrefs; 
     SharedPreferences.Editor prefsEditor; 

     private static SharedPreferencesHelper instance = null; 

     public static synchronized SharedPreferencesHelper getInstance() { 
      if (instance == null) { 
       instance = new SharedPreferencesHelper(); 
      } 

      return instance; 
     } 



private SharedPreferencesHelper() { 
myPrefs = MyApplication.getInstanse().getApplicationContext().getSharedPreferences("prefs", Context.MODE_WORLD_READABLE); 
      prefsEditor = myPrefs.edit(); 
    } 

     public void putValueForKey(String key, String value) { 
      prefsEditor.putString(key, value); 
      prefsEditor.commit(); 
     } 

    } 


    public class MyApplication extends Application { 

     private static MyApplication instance; 

     @Override 
     public void onCreate() { 
      super.onCreate(); 
      instance = this; 
     } 

     public static MyApplication getInstanse(){ 
      if(instance ==null){ 
       throw new IllegalStateException("Application not created yet!"); 
      } 
      return instance; 
     } 
    }