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

sharedPrefence 관련 질문 있습니다.

0 추천
@Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_chat);

 

        recyclerView = (RecyclerView) findViewById(R.id.recycleView);
        button = (Button) findViewById(R.id.button);

        editText = (EditText)findViewById(R.id.editText);

 

        list = new ArrayList<>();
        arrayList = new ArrayList<String>();

 

        adt = new AdapterActivity(Chat_List.this, list, R.layout.chat_list);

 

        layoutManager = new LinearLayoutManager(Chat_List.this);
        recyclerView.setHasFixedSize(true);
        recyclerView.setLayoutManager(layoutManager);
        recyclerView.setFocusable(false);

        recyclerView.setAdapter(adt);

 

        SharedPreferences sharedPreferences =PreferenceManager.getDefaultSharedPreferences(Chat_List.this);

        int size = sharedPreferences.getInt("size", 0);

        for(int i = 0; i<size; i++)
        {
            chat_data = new Chat_Data(sharedPreferences.getString("num"+i, null));

            list.add(chat_data);

            Log.i("List-size", String.valueOf(list.size()));

            adt.notifyDataSetChanged();

        }

        button.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View view) {

                if(editText !=null && editText.length()!= 0)
                {
                    text = editText.getText().toString();

                    chat_data = new Chat_Data(text);

                    list.add(chat_data);
                    arrayList.add(text);

                    adt.notifyDataSetChanged();
                }
                else
                {
                    button.setEnabled(true);

                    Toast.makeText(getApplication(), "내용을 입력해주세요", Toast.LENGTH_SHORT).show();
                }
            }
        });
    }

    @Override
    public void onPause()
    {
        super.onPause();

        Log.i("arrayList-size", String.valueOf(arrayList.size()));

        SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(Chat_List.this);
        SharedPreferences.Editor editor = sharedPreferences.edit();

        editor.putInt("size", list.size());

        for(int i = 0; i<list.size(); i++)
        {
            editor.putString("num"+i, list.get(i).toString()); <-- 여기 이 list(List<ArrayList>) 를
        }

        editor.commit();
    }

 

위 코드처럼 하면 앱을 종료했다가 다시 실행시켜도 앱에 데이터가 남아있는데요,

 

onPause() 를

 

SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(Chat_List.this);
        SharedPreferences.Editor editor = sharedPreferences.edit();

        editor.putInt("size", arrayList.size());

        for(int i = 0; i<arrayList.size(); i++)
        {
            editor.putString("num"+i, arrayList.get(i).toString());  <-- 이런식으로 arrayList를
        }

        editor.commit();

 

이런식으로, list 부분을 arrayList로 바꾸면 전에 저장되었던 값들은 모두 사라지고, 종료했다가 다시 실행시켰을 때, 저장되었었던 데이터가 모두 사라집니다;

 

왜그런 걸까요???

 

그리고 또 궁금한게; List<Chat_Data> list = new ArrayList<>(); 이런식으로 만들었고,

 

onPause부분에 for문 안에 코드인데요

 

 editor.putString("num"+i, list.get(i)); 이거 처럼 하고싶은데

 

List<Chat_Data> list 부분이 String 이 아니라서  list.get(i) 이 안됩니다;

 

답변 부탁드립니다..!
알파고 (4,320 포인트) 님이 2017년 11월 1일 질문

답변 달기

· 글에 소스 코드 보기 좋게 넣는 법
· 질문에 대해 추가적인 질문이나 의견이 있으면 답변이 아니라 댓글로 달아주시기 바랍니다.
표시할 이름 (옵션):
개인정보: 당신의 이메일은 이 알림을 보내는데만 사용됩니다.
스팸 차단 검사:
스팸 검사를 다시 받지 않으려면 로그인하거나 혹은 가입 하세요.
...