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

안드로이드 생명주기 질문입니다.(수정)

0 추천

안녕하세요.

안드로이드공부하고 있는 학생입니다.

<조건>

※액티비티 생명주기에 따라 게임 플레이어(player)와 게임 점수(currentScore)를 정장하고, 불러오는 해당 콜   백 메서드를 조건에 맞도록 작성할것

.
ⅰ. 메인화면의 "게임하기" 버튼을 클릭하면 게임화면이 생성되어서, 저장되어 있는 게임 플레이어(player)와 게임 점수(currentScore)를 가져와 실행화면과 같은 토스트 메세지가 출력되도록 해당 생명주기 콜백 메서드를 구현.
    - SharedPreferences객체의 인스턴스를 불러온다.(파일명 : PLAYER, 모드 : MODE)
    - SharedPreferences 인스턴스가 null이 아니면서 "player"key를 포함하고 있으면, 게임 플레이어("player")와 게임 점수("currentScore")를 불러와 실행 결과와 같은 토스트 메시지가 출력되도록 해당 생명주기 콜백 메서드를 구현.

ⅱ. "게임시작(gameStart)"버튼과 "돌아가기(backButton)"버튼을 id로 구분하여 다음과 같이 처리하는 onDoGameClicked(View v) 메서드를 구현. (switch ~ case문 사용)
    - "게임시작(gameStart)"버튼을 클릭할 때 마다 게임점수(currentScore)를 1점씩 누적하고, 실행결과와 같은 "Score : xx"로 출력하는 토스트 메시지 작성
    - "돌아가기(backButton)"버튼을 클릭하면 인텐트에 "player"와"currentScore"를 key로 게임 플레이어(PLAYER)와 게임점수(currentScore)를 담아 메인화면으로 반환하고 게임화면을 종료할 것.

ⅲ. 게임화면에서 "돌아가기"버튼을 클릭하면 게임화면을 종료하기 전에 게임 플레이어(player)와 현재 게임점수(currentScore)를 저장하고, 실행화면과 같은 토스트 메시지가 출력되도록 해당 생명주기 콜백 메서드를 구현.
    - SharedPreferences 객체의 인스턴스를 불러온다.(파일명 : PLAYER, 모드 : MODE)
    - Editor를 사용하여 "player"key에 "홍길동"을 문자열로 게임 플레이어를 저장하고, "currentScore"key에 currentScore를 정수로 게임점수를 저장한 후, 실행화면과 같은 토스트 메시지가 출력되도록 해당 생명주기 콜백 메서드를 구현.

ⅳ. 게임화면으로부터 전달 받은 인텐트에서 player, currentScore를 가져와서 실행결과와 같은 토스트 메서드를 출력하는 콜백 메서드를 작성할 것.
    - 콜백 메서드의 매개변수로 전달된 requestCode, resultCode를 활용할 것(switch ~ case문 사용)

제가 지금 코딩하고 있는 생명주기 실행화면과 조건이구요. 

1번과 3번은 코딩을하였는데 2번과 4번을 계속 혼자해보다 도저히 안되서 이렇게 질문올려요.ㅠ

<SecondActivity.java>

public class SecondActivity extends AppCompatActivity {

    public static final String PLAYER = "Player01";
    public static final int Mode = Activity.MODE_PRIVATE;
    int currentScore;

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

    }

    /*1번 조건*/
    protected void restoreFromSavedState() {

        SharedPreferences myPrefs = getSharedPreferences(PLAYER, Mode);

        if ((myPrefs != null) && (myPrefs.contains("player"))) {
            String player = myPrefs.getString("player", "");
            currentScore = myPrefs.getInt("currentScore", 0);

            Toast.makeText(this, PLAYER + "의 직전 score : " + currentScore + "점을 불러왔습니다.", Toast.LENGTH_LONG).show();
        }
    }

    /*2번 조건*/
    public void onDoGameClicked(View v) {
        switch (v.getId()) {
            case R.id.gamebtn :
                currentScore++;
                Toast.makeText(this, "Score : " + currentScore , Toast.LENGTH_LONG).show();
                break;
            case R.id.backbtn :
                Intent myIntent = new Intent(SecondActivity.this, MainActivity.class);

                myIntent.

        }
    }
    @Override
    protected void onStart() {
        super.onStart();
    }

    @Override
    protected void onResume() {
        restoreFromSavedState();
        super.onResume();
    }

    /*3번 조건*/
    @Override
    protected void onPause() {/*여기*/
        SharedPreferences myPefs = getSharedPreferences(PLAYER, Mode);

        SharedPreferences.Editor myEditor = myPefs.edit();
        myEditor.putString("player", "홍길동");
        myEditor.putInt("currentscore", 0);

        myEditor.commit();

        if ((myPefs != null) && (myPefs.contains("player"))) {
            String player = myPefs.getString("player", "");
            int currentscore = myPefs.getInt("currentscore", 0);
        }
        Toast.makeText(this, PLAYER + "의 현재 score : " + currentScore + "점을 저장합니다.", Toast.LENGTH_LONG).show();
        super.onPause();
    }

<MainActivity.java>

public class MainActivity extends AppCompatActivity {

    public static final int REQUEST_CODE = 1001;

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

    public void onButtonClicked(View v) {

        Intent myIntent = new Intent(this, SecondActivity.class);
        startActivityForResult(myIntent, REQUEST_CODE);
    }
                                 .
                                 .
                                 .
                                 .
                                 .

 @Override
    protected void onRestart() {

        super.onRestart();
    }

    /*4번 조건*/
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);

        switch (requestCode) {
            case REQUEST_CODE:
                if (requestCode == REQUEST_CODE) {

                    /*String player = String.format();*/

                    Toast.makeText(this, requestCode + "의 오늘 게임점수는" + resultCode + "점 입니다.", Toast.LENGTH_LONG).show();
                }
        }
    }
}

하루종일 붙잡고 있는데도 도저히 "2번과 4번" 어떻게 풀어나가야될지 생각이 안나네요ㅠㅠㅠ제발 도와주세요ㅠㅠㅠ

p.s. 조건이 잘 안보여서 다시 올려요ㅠㅠㅠㅠㅠ

큐큐 (160 포인트) 님이 2016년 6월 2일 질문

1개의 답변

0 추천

MainActivity에서 startActivityForResult를 사용하셨는데,

SecondActivity에서는 그것을 처리하는 부분이 없네요.

startActivityForResult 사용법을 더 보셔야할것 같구요,

Intent i = getIntent();
i.putExtra("player", "player1");
i.putExtra("score", 100);
setResult(RESULT_OK, i);
finish();

secondActivity에서 이런식으로 처리를 하면 MainActivity의 onActivityResult 메서드를 호출하게 될것입니다.

캬옹이 (37,920 포인트) 님이 2016년 6월 2일 답변
...