2011-05-12 3 views
1

내 응용 프로그램에서 String의 ArrayList를 저장하려고합니다. 나는 add() 방법을 가진 활동 즐겨 찾기를 가지고있다. 이 메서드는 다른 Activity에서 ArrayList에 무언가를 추가하기 위해 호출됩니다. 그 때마다 무언가가 추가 될 때마다, 내가 먼저 SharedPreferences에 저장 한 모든 값을 얻고, 값이 이미 존재하지 않는지 확인하고, 그렇지 않다면 ArrayList에 추가합니다. 마지막으로 모든 값을 SharedPreferences에 다시 저장하겠습니다. 활동 즐겨 찾기가 호출되면 즐겨 찾기가 모두 포함 된 목록이 표시됩니다 (데이터베이스의 모든 값과 모든 값을 가져옵니다).onCreate()에서 호출되지 않는 메서드에서 SharedPreferences를 사용할 수 없습니까?

그래서 메소드를 만들었지 만, onCreate()은 ArrayList에 항목이 추가 될 때 절대 호출되지 않으므로 SharedPreferences을 인스턴스화 할 수 없습니다. 이 일을 위해 몇 가지 힌트를 줄 수있는 사람이 있습니까?

참고 : SQLite 데이터베이스로 작업하고 싶지 않습니다. 왜냐하면 내 응용 프로그램에서 단 하나의 클래스 일 뿐이므로 아주 작은 값만 포함하기 때문입니다. 에서 onCreate 다음 호출되지 없구요 경우

public void add(String v, String k){ 
    prefs = PreferenceManager.getDefaultSharedPreferences(this); 
    int countvaca = prefs.getInt("vacacount", 0); 
    int countkantoor = prefs.getInt("kantoorcount", 0); 

    for(int i = 0; i <countvaca; i++){ 
     vaca.add(prefs.getString("Vaca"+i, null)); 
    } 
    for(int j = 0; j <countkantoor; j++){ 
     kantoor.add(prefs.getString("Kantoor"+j, null)); 
    } 

    boolean blnFound = vaca.contains(v); 
    System.out.println("Does arrayList contain vacature ? " + blnFound); 
    if(!blnFound){ 
     vaca.add(v); 
     kantoor.add(k); 
    } 

    Editor edit = prefs.edit(); 
    countvaca = vaca.size(); 
    countkantoor = kantoor.size(); 
    edit.putInt("Vacaturelijstgrootte", countvaca); 
    edit.putInt("Kantoorlijstgrootte", countkantoor); 
    for(int a = 0; a<countvaca; a++){ 
     edit.putString("Vaca"+a, vaca.get(a)); 
    } 
    for(int b = 0; b< countkantoor; b++){ 
     edit.putString("Kantoor"+b, kantoor.get(b)); 
    } 
    edit.commit(); 


} 
+0

어떤 종류의 오류 메시지가 있습니까? 아마 그것을 추가하는 것이 가장 좋습니다. – Stephan

답변

0

당신은 활동이 시작되지 않습니다, 그래서 "이"

prefs = PreferenceManager.getDefaultSharedPreferences(this); 

에 제대로 참조하지 않습니다

또한, 코드는 내가 사용 초기화 된 활동.

어느 쪽이든 당신은 (자동에서 onCreate 메소드를 호출)하여 "추가"방법을 포함하고 활동을 시작한다, 또는 당신은 당신의 추가 방법, 즉 현재 활성화 된 활동에 대한 참조를 전달할 수있는이 같은 :

public void add(String v, String k, Activity a){ 
    prefs = PreferenceManager.getDefaultSharedPreferences(a); 

그러나 한 활동에서 다른 활동으로 직접 메서드를 호출하는 것은 좋은 프로그래밍 스타일로 간주되지 않습니다. 두 활동이 공통적으로 가지고있는 코드가 들어있는 별도의 클래스를 만드는 것이 가장 좋습니다.

+0

덕분에 도움이되었습니다. – Hannelore

+0

글쎄, 당신의 논리에 따라 Activity가있는 생성자를 추가했습니다. 이제 항목이 이미 있는지 알려주는 Toast도 추가하고 싶습니다. SharedPreferences와 마찬가지로 Toast도 인스턴스화했지만 작동하지 않습니다. 무슨 일이 일어나고 있는지 아십니까? 주어진 답변에 대해 이미 감사드립니다! – Hannelore

+0

토스트 메시지를 작성하는 코드는 무엇입니까? 그리고 오류 메시지는 무엇입니까? – THelper

관련 문제