2012-06-20 3 views
0

내 응용 프로그램에서, 나는 SharedPreference 변수에 사용자가 저장 한 값을 기반으로 배열을 선언해야합니다. 문제는 내 클래스에서 onCreate()를 호출하기 전에 배열의 크기를 선언해야하므로 정적 블록에서 배열을 선언해야한다는 것입니다.클래스의 정적 블록에서 안드로이드 getSharedPreferences

부모 배열이있는 내 액티비티에 ExpandableList가 다음 7 일간의 날짜로 있습니다. 내가 정적 블록 내부의 배열을 선언하지 않으면

static int plannerSlotCount=7; 
static public String[] parent = new String[plannerSlotCount]; 
static 
{ 

    Calendar cal = Calendar.getInstance(); 
    String strdate = null; 
    SimpleDateFormat sdf = new SimpleDateFormat("dd-MM-yyyy"); 

    int i; 
    for(i=0;i<plannerSlotCount;i++) 
    { 

     if (cal != null) { 
      strdate = sdf.format(cal.getTime()); 
      } 
      parent[i] = strdate; 
      cal.add(Calendar.HOUR_OF_DAY,24); 
    } 

} 

은, 그때 그래서, 정적 블록 자체 I에서 배열의 내용을 선언해야

public View getGroupView(int groupPosition, boolean isExpanded, 
      View convertView, ViewGroup parent) { 
     TextView textView = getGenericView(); 
     textView.setText(getGroup(groupPosition).toString()); 
     return textView; 
    } 

에 오류가 추측.

내가 표시 할 일 수를 변경하고 싶습니다 (현재 7로 설정되어 있습니다). 그래서 SharedPreference 변수에 숫자를 저장하고 배열에 초기화하려고 생각했습니다.

내가 직면하고 문제는

SharedPreferences preferences = getSharedPreferences(Settings.PREF_SETTINGS_FILE_NAME, MODE_PRIVATE); 
    final int slotCounter = preferences.getInt("slotCount", 7); 

나에게

Cannot make a static reference to the non-static method getSharedPreferences(String, int) from the type ContextWrapper 

이를 달성하기 위해 가능한 모든 방법이 있나요 없다는 오류를 준다이다?

답변

1

아니요, 할 수 없습니다. 이후

static { 
} 

블록은 클래스를 처음 참조 할 때 호출됩니다. 그래서, 제 생각 엔, 전에 onCreate라고 부릅니다. SharedPreference에 액세스하려면 context이 필요하고 contextonCreate 이후에 유효합니다. 그래서 당신은 정적 블록에 SharedPreference에 액세스 할 수 없습니다

+0

내 질문을 편집했습니다. 가능한 경우 내용을 확인하고 제안하십시오. – Swayam

+0

어디에서 sharedPreference를 검색하려고합니까? – Blackbelt

+0

정적 블록 안에서 처리하고 싶습니다. 그러나 오류가 발생합니다. 내 질문에 주어진 코드가 작동하지만 SharedPreferences 너무 포함 할 싶습니다. – Swayam

0

첫째, 나는 당신이 조금 특이한 사운드에 접근한다고 말해야합니다. 왜 배열을 정적으로 선언하고 onCreate 전에 초기화하겠습니까? 이것이 진정한 요구 사항이라면 onCreate()가 컨텍스트에 처음 액세스 할 때 솔루션이 있는지 확신하지 못합니다.

배열을 정적으로 정의했지만 onCreate (사용하기 전에)에서 초기화 할 것을 제안 할 수 있습니다. 그 배열이 당신의 활동 범위 밖에서 사용되지 않는 한, 이것은 잘 작동 할 것입니다.

아마도 (정적 인 이유와 onCreate를 시작한 이유와 같은) 자세한 내용을 공유했다면 더 많은 도움을받을 수 있습니다.

+0

내 질문을 편집했습니다. 가능한 경우 내용을 확인하고 제안하십시오. – Swayam

관련 문제