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

프리퍼런스 쓰는법을 잘 모르겠습니다.

0 추천

(전부 보기 힘드시다면 프리퍼런스 사용부분은 맨 위에 세팅부분과, 맨 밑에 save버튼,load버튼에 있습니다)

 

package com.example.lee.simulating;

import android.content.Intent;
import android.content.SharedPreferences;
import android.content.res.Resources;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;

import java.util.Scanner;

public class MainActivity extends AppCompatActivity {

    public static int level = 1;
    public static int gold;
    public static int exp = 0;

    SharedPreferences setting;
    SharedPreferences.Editor editor;



    @Override
protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        setting = getSharedPreferences("setting", 0);
        editor= setting.edit();





        Button gohunting = (Button) findViewById(R.id.huntbutton);
        Button goshop = (Button)findViewById(R.id.shopbotton);
        gohunting.setOnClickListener(listener);
        goshop.setOnClickListener(listener);

TextView howgold = (TextView)findViewById(R.id.gold);
        howgold.setText(String.format(getString(R.string.gold),gold));
        TextView name = (TextView)findViewById(R.id.name);
        name.setText(String.format(getString(R.string.name), naming.username));
    }

    Button.OnClickListener listener = new Button.OnClickListener() {


        public void onClick(View v) {
            switch (v.getId()) {
case R.id.huntbutton:
                    Intent gohunt = new Intent(MainActivity.this, Battle.class);
                    startActivity(gohunt);
                    break;
case R.id.shopbotton:
                    Intent intent = new Intent(MainActivity.this, Shop.class);
                    startActivity(intent);
                    break;
                case R.id.save:
                    editor.putInt("골드", gold);
                    editor.commit();
                    break;
                case R.id.load:
                    setting.getInt("골드", 0);
                    break;



            }

        }
    };

소스는 대충 이런데요, gold값을 다른 액티비티에서 MainActivity.gold++ 이렇게 증가시켜서 쓰고 있는데,

앱을 껏다켜도 저장이 안되서 고민입니다...ㅜ.ㅜ

어디가 잘못된걸까요?

익명사용자 님이 2015년 11월 11일 질문

2개의 답변

0 추천

로드가 되긴 되는건가요?

gold =  setting.getInt("골드"0); 를 해 주셔야 저장된 값을 읽을 듯 한데요..

 

그리고 오낙 파편화가 되어, 단말에 따라 인코딩 문제가 발생할 가능성을 배제할 수 없으니.. 가급적 name 값도 영어로 하시는 것을 추천합니다. 

 

익명사용자 님이 2015년 11월 11일 답변
2015년 11월 11일 수정
로드안됩니다..ㅜ 로드를 구현하고 싶은건데 맘대로 안되네요.
말씀해주신것은 맨 밑에 load 버튼부분에 하시라는건가욥?
그래도 잘 안되는것 같네요.. 끙
0 추천
저장하는 부분이 없습니다.

다른 액티비티에서 gold 변수의 값을 변경시켜도 해당 값을 저장하는 루틴을 타지 않으므로

프리퍼런스에는 저장이 되어 있지 않습니다.

 

다른 액티비티에서 프리퍼런스에 gold 값을 직접 저장하시거나,

MainActivity 에서 다른 앱을 띄울 때 startActivityForResult() 를 이용해서 띄우시고

다른 앱이 종료될때 결과값을 받아서 저장하는 방식으로 취하시는게 정석입니다.
바램 (19,650 포인트) 님이 2015년 11월 11일 답변
다른 액티비티에 프리퍼런스 gold값을 직접 저장하는게 어떤 방식일까요..?
...