2017-05-14 1 views
-1

공유 환경 설정에서 값을 저장 및 검색하려고하지만 처음으로 응용 프로그램을 열면 공유 환경 설정 값이 NULL입니다. 다음 번부터 이전 키의 값을 보여줍니다. 공유 환경 설정에서 배열 목록 값 저장 및 검색 null

내가 배열 목록의 값 또는 "SET"을 얻고 싶은 내 코드,

여기
SharedPreferences sharedPreferences; 
SharedPreferences.Editor editor; 
Set<String> set; 
sharedPreferences = getApplicationContext().getSharedPreferences(mypreference, Context.MODE_PRIVATE); 
    databaseReferenceImages.child(postkey).addValueEventListener(new ValueEventListener() { 
     @Override 
     public void onDataChange(DataSnapshot dataSnapshot) { 
SharedPreferences.Editor editor = sharedPreferences.edit(); 
      Set<String> sharedlist = new HashSet<String>(); 
      sharedlist.addAll(second); 
      editor.putStringSet("notifications", sharedlist); 
      editor.apply(); 
      for (String a : sharedlist) { 
       Log.d("thesharedlist", a); 
      } 
} 

     @Override 
     public void onCancelled(DatabaseError databaseError) { 

     } 
    }); 

set = sharedPreferences.getStringSet("notifications", null); 
    if (set != null) { 
     for (String a : set) { 
      Log.d("thesetis", a); 
     } 
    } 

내가 특정 "POSTKEY"의 값을 원하는 (Poskey 각 게시물에 대한 다를 수 있습니다)입니다 onDataChange 메서드 밖에 있으므로 공유 환경 설정을 사용했습니다. 그것의 문자열을 잘 작동하지만 배열 목록 또는 집합 아닙니다. 내가 처음으로 응용 프로그램을 열고 특정 게시물을 클릭하면 다음과 같은 문제가

  • 발생, 반환되는 공유 기본 설정 값의 값은 NULL입니다.

  • 동일한 게시물을 두 번째 열면 값은 으로 완벽하게 반환됩니다.

  • 두 번째 게시물을 열면 이전 게시물 의 값이 반환됩니다.

  • 첫 번째 게시물을 다시 열면 두 번째 게시물의 값이 반환됩니다.

어디서 잘못 되었나요? 앱을 열 때마다 공유 환경 설정의 값을 지우려고했지만 동일한 문제가 발생합니다. 심지어이 link을 따라 갔지만 아무 것도 효과가 없었습니다. 어떤 도움이라도 좋을 것입니다. 미리 감사드립니다.

+0

시도', 내 코드입니다 그것은 당신이 데이터가 실제로 편집기에 저장되어 있는지 확인 한 @LunarWatcher – Zoe

+0

을 editor.commit'? 관련 코드가 실제로 – Anusha

+0

을 작동하지 않습니다 – Zoe

답변

1

당신이 널 처음 싶어하지 않는 경우, 당신은이 두 가지 중 하나를 수행 할 수 있습니다 getStringSet 전에 sharedpreference에 기본값 저장

1 호 getStringSet 다르게

sharedPreferences.getStringSet("notifications", "it isn't saved yet!"); 

2-

SharedPreferences.Editor editor = sharedPreferences.edit(); 
editor.putStringSet("notifications", sharedlist); 
editor.apply(); 

이전 게시물이 아닌 현재 게시물을 가져 오려면 이전에 저장해야합니다. 내 추측으로는 게시물 번호 1을 클릭하면 sharedpreference에 저장되고 두 번째 항목을 확인하려면 첫 번째 항목을 반환합니다.

+0

나는 이미 두 번째 일을 마쳤습니다. 친절하게 내가 질문에 게시 한 코드를 살펴보십시오. – Anusha

+0

친애하는 @Anusha, 나는 당신의 코드를 읽었습니다. 너는 두번째 해결책을하지 않았다. 'addValueEventListener'는 비동기식이며'getStringSet' 다음에 실행될 수 있습니다. –

+0

감사합니다 !! 그렇다면 어디에서 getStringSet의 코드를 작성해야합니까? – Anusha

0

나는 1500ms 후에 sharedpreference에 저장하여이 문제를 해결했습니다.

이것은

final Handler handler = new Handler(); 
    handler.postDelayed(new Runnable() { 
     @Override 
     public void run() { 
     set = sharedPreferences.getStringSet("notifications", null); 
      if (set != null) { 
       for (String a : set) { 
        Log.d("thesetis", a); 
       } 
      } 
     } 
    }, 1500); 
관련 문제