마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

체크박스에 SharedPreferences를 이용하려고 합니다.

0 추천
public class BackgroundActivity extends Activity implements
  OnItemClickListener, OnClickListener {

 List<ListString> rowItem;
 ListView listView;
 private Button okButton;
 private Button cancelButton;
 ListViewAdapter adapter;
 boolean saveBoolean;
 String saveString;

 public static final String[] title = new String[] { "배경 1", "배경 2" };

 @Override
 public void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.ex);

  setResult(Activity.RESULT_CANCELED);

  rowItem = new ArrayList<ListString>();
  for (int i = 0; i <= title.length; i++) {
   ListString item = new ListString(title[i], false);
   rowItem.add(item);
  }

  listView = (ListView) findViewById(R.id.set);
  adapter = new ListViewAdapter(BackgroundActivity.this,
    R.layout.ex_name, rowItem);
  listView.setAdapter(adapter);
  listView.setOnItemClickListener(this);

  okButton = (Button) findViewById(R.id.ok_button);
  cancelButton = (Button) findViewById(R.id.cancel_button);

  okButton.setOnClickListener(this);
  cancelButton.setOnClickListener(this);

 

 }

 private boolean getSaveBoolean(String key, boolean value) {
  SharedPreferences preferences = getSharedPreferences("Background",
    Activity.MODE_PRIVATE);
  return preferences.getBoolean(key, value);
 }

 

 private void saveDataBoolean(String key, boolean value) {
  SharedPreferences preferences = getSharedPreferences("Background",
    Activity.MODE_PRIVATE);
  SharedPreferences.Editor editor = preferences.edit();
  editor.putBoolean(key, value);
  editor.commit();
 }
 
 ListString list;

 @Override
 public void onItemClick(AdapterView<?> parent, View view, int position,
   long id) {
  // TODO Auto-generated method stub

  list = (ListString) parent.getItemAtPosition(position);

  if (list.ismCheck() == false) {
   list.setmCheck(true);
   Toast.makeText(getApplicationContext(), list.getTitle(),
     Toast.LENGTH_LONG).show();
  } else {
   list.setmCheck(false);
  }
  adapter.notifyDataSetChanged();
  
  

 }

 @Override
 public void onClick(View v) {
  // TODO Auto-generated method stub

  switch (v.getId()) {
  case R.id.ok_button:
   saveDataBoolean(list.getTitle(), list.ismCheck());
   finish();
   break;
  case R.id.cancel_button:
   finish();
   break;
  }

 }

}

baseActivity와 커스텀 리스트뷰를 사용 하였는데...버튼이 체크 되어 있는 것을 저장을 하려고 sharedPreferences를 사용

을 하였습니다. 위에 처럼 코딩을 해 보았는데....

이 액티비티를 띄우니 오류가 바로 생기더군요....

sharedPreferences를 처음 사용해서 이래저래 구글링을 해보았지만....이해력이 부족해서... 사용을 못하고 있습니다 ㅜㅜ

save 할 때 잘못 된 것 같기도 하고...load 할 때 소스 코드를 넣어도 오류가 생기고....

데이터를 load 할 때 어떻게 해야 할지...

안왕초보 (1,390 포인트) 님이 2014년 8월 21일 질문

2개의 답변

0 추천

바로 죽는다는건 onCreate에 문제가 있는거겠죠?

for (int i = 0; i <= title.length; i++) 

여기가 잘못됐네요

i < title.length로 고치세요

alkyne (22,960 포인트) 님이 2014년 8월 21일 답변
그거랑은 상관 없었습니다 ㅎㅎ 잘 못 된거 보고 수정은 했었는데 상관이 없더라구요 ㅎㅎ
로그를 올려주세요   .
0 추천
http://androidhuman.tistory.com/193

여기서 확인해보세요~ 저는 여기서 해결했습니다~
Amar (600 포인트) 님이 2014년 8월 21일 답변
private void getLoadString() {
        SharedPreferences preferences = getSharedPreferences("Background",
                Activity.MODE_PRIVATE);
        st = preferences.getString("title", null);
        boolean d = preferences.getBoolean(st, true);
        int i = preferences.getInt(st, 0);

        Toast.makeText(BackgroundActivity.this,
                st + String.valueOf(d) + String.valueOf(i), Toast.LENGTH_LONG)
                .show();
       
    }

    private void saveDataBoolean(String key, boolean value, int i) {
        SharedPreferences preferences = getSharedPreferences("Background",
                Activity.MODE_PRIVATE);
        SharedPreferences.Editor editor = preferences.edit();
        editor.putBoolean(key, value);
        editor.putInt(key, i);
        editor.putString("title", key);
        editor.commit();
       
        Toast.makeText(BackgroundActivity.this, key + String.valueOf(value) + String.valueOf(i), Toast.LENGTH_LONG).show();
    }

이렇게 수정을 봤는데 load를 creat 부분에 넣기만 하면 계속 애러가 생기네요...ㅜㅜ
...