0

조각에서 아래 활동으로 문자열 값을 전송하려고합니다. 전송 결과에 액티비티로 전송되면 값이 비어 있다고 표시됩니다. 자세한 정보가 필요하면 알려주십시오.Android 조각에서 활동으로 이동하는 문자열

조각 :

//put selected chapter title in memory 

String selectedChapter = chapters[position]; 

SharedPreferences pref = getActivity().getPreferences(0); 
SharedPreferences.Editor edt = pref.edit(); 
edt.putString("selectedChapter", selectedChapter); 
edt.commit(); 

//launch activity 
Intent intent = new Intent(getActivity(), ChapterDetailActivity.class); 
startActivity(intent); 

활동 :

//retrieve selected chapter filename from previous view 

    SharedPreferences pref = ChapterDetailActivity.this.getPreferences(0); 
    String filename = pref.getString("selectedChapter", "empty"); 

    Log.e("File: ", filename); 
+0

액티비티의 get 환경 설정 메소드, pre를 저장하는 데 사용되는 파일 모든 활동은 해당 활동에 고유하게 적용됩니다 (앱의 다른 곳에서는 볼 수 없음). 이미 게시 된 답변에는 응용 프로그램과 관련된 기본 설정을 만드는 두 가지 방법이 나와 있습니다. –

답변

1

환경 설정을 저장하기위한 도우미 클래스를 만드는 것을 좋아합니다. 이렇게하면 컨텍스트를 사용하는 대신 파일 이름을 사용하여 액세스 할 수 있습니다. 즉, 모든 환경 설정을 한 곳에 저장하고 키를 저장할 상수를 만들 수 있습니다.

"selectedChapter"과 같은 문자열 리터럴을 전달할 때 컴파일러는 철자가 맞는지 여부를 확인할 방법이 없습니다. 상수를 생성함으로써 컴파일러는 키가 존재하는지 확인할 수 있습니다.

PreferencesHelper prefs = new PreferencesHelper(getActivity()); 

그리고 데이터에 액세스 할 :과 같이

PreferencesHelper prefs= new PreferencesHelper(this); 

그리고 당신의 조각을 :

public class PreferencesHelper { 

    private SharedPreferences prefs; 

    private static final String FILE_NAME = "com.yourpackage.yourapp.prefs"; 

    public static final String KEY_CHAPTER = "chapter"; 

    public PreferencesHelper(Context context) { 
     prefs = context.getSharedPreferences(FILE_NAME, Context.MODE_PRIVATE); 
    } 


    /** 
    * Save the specified value to the shared preferences 
    * 
    * @param key 
    *   The key of the value you wish to load 
    * @param value 
    *   The value to store 
    */ 
    public void save(String key, String value) { 
     prefs.edit().putString(key, value).commit(); 
    } 


    /** 
    * Load the specified value from the shared preferences 
    * 
    * @param key 
    *   The key of the value you wish to load 
    * @param defValue 
    *   The default value to be returned if no value is found 
    */ 
    public int loadString(String key, String defValue) { 
     return prefs.getString(key); 
    } 

} 

그런 다음 활동과 같이 액세스 할 수 있습니다

// Save 
prefs.save(PreferencesHelper.KEY_CHAPTER, chapter); 

// Load 
prefs.load(PreferencesHelper.KEY_CHAPTER, null) 
+0

getString (key)에는 문자열 값에 다른 매개 변수가 필요합니다. 어떤 아이디어? – user2793987

+1

죄송합니다, 실수. 기본값을 제공하기위한 것이므로 원하는 경우 'null'을 전달하거나 애플리케이션에 가장 적합한 것이 무엇이든간에 빈 문자열 만 전달할 수 있습니다. – user184994

+0

대단히 감사합니다! – user2793987

0

이 된 SharedPreferences는 예를 들어, 객체를 획득하는 다른 방법을 시도 당신이 getApplicationContext()와 컨텍스트를 얻을 수있는 상황

SharedPreferences _preferences = PreferenceManager.getDefaultSharedPreferences(_context); 

를 사용하여

다음

당신이 그것을 훨씬의 읽기 그것은 :

SharedPreferences.Editor editor = _preferences.edit(); 
editor.putString(key, val); 
editor.commit(); 
:
_preferences.getString(key,""); 

및 쓰기에 대한

+0

나는이 방법을 시도하고 그것은 계속 충돌했다. 나는 "챕터"와 같은 값과 문자열에 대한 값으로 키를 설정합니다. 그런 다음 getString 메서드를 읽는 방법을 알아낼 수 없도록 ("챕터", "빈"). 어떤 아이디어? – user2793987

+1

기기에 루트 권한이 있습니까? 루트 탐색기와 같은 응용 프로그램을 설치하고/data/data/package name/sharedprefs에있는 응용 프로그램의 데이터 폴더로 이동하여 기본 설정 XML 파일을 검사하여 작성이 성공했는지 확인할 가치가있을 것입니다. – jcollomosse

관련 문제