2012-10-02 3 views
2

하나의 활동에서 sharedpreferences 데이터를 만들었습니다. 다른 활동에서 사용할 수 있습니까? 그렇다면 어떻게이 일을 성취 할 수 있습니까? 4 플레이어의android : sharedpreferences는 여러 활동에서 사용할 수 있습니까?

이름은 NameIndex.java에 저장됩니다, 나는 NameIndex.java 아래에서 MainActivity.java

에서 4 플레이어의 저장된 이름을 사용하고 싶습니다 :

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

무엇을 시도하셨습니까? 하나 또는 여러 활동에서 sharedpreference를 사용하면 아무런 차이가 없습니다. – njzk2

답변

0

처럼 사용하고 내가 하나 된 SharedPreferences 활동 사이에 파일을 사용하지만, 내가 다른 개인에 선언 된 동일한 파일 이름을 사용했다 않았다 두 활동의 변수. 내 코드는 following link에서 확인할 수 있습니다. 필자가 이해하지 못하는 이유는 플레이어의 이름만으로 4 개의 SharedReferences 파일을 사용하고 단 한 파일의 모든 이름을 사용하지 않는 이유입니다. 그것은 2 개 이상의 변수를 저장하기 위해 사용했기 때문에 가능합니다.

+0

나는 하나의 sharedpreference (SP), 즉 4 개의 변수 (특정 슬롯에 플레이어의 점수)를 저장하는 데 하나의 키 (슬롯 #)를 사용했지만 실패했습니다. "SharedPreferences 솔루션은지도처럼 작동합니다. 하나의 KEY에 하나의 값이 있습니다." 나는 또한 http://stackoverflow.com/questions/12438514/android-sharepreference에서 그러한 질문을했다. 어쩌면 코딩은 1 SP가 4 개의 점수에 대해 1 개의 키를 사용하지만, 간단하고 갇히지 않도록 넣어서 4 SP를 정의 할 수 있도록 추가로 수정할 수 있습니다. 그것에 대해 조언 해 줄 수 있습니까? 모두 당신의 제안에 대해 정말로 많은 감사합니다 ~ – pearmak

+0

@pearmak, 나는 두 가지 옵션이 있다고 생각합니다 : - 문자열을 문자 배열로 사용하거나 SharedPreferences를 계속 사용하려면 각 필드에 대한 표시기가있는 일반 텍스트로 사용하십시오. 그것은 SharedPreferences Editor의 .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; 
     } 
    } 
관련 문제