본문 바로가기
5번 프로그래밍/Kotlin, 안드로이드 스튜디오

안드로이드 스튜디오 - Udacity 챕터2, 3장 23절. Exercise Adding Sharing with an Intent 연습 의도로 공유 추가

by 하늘나는 곰 2021. 6. 30.

문제가 발생했습니다.

 

보통 동영상 강의에는 순수하게 한국에 자막이 아니라

 

유튜브에서 지원하고 있는 국가별 자막지원을 참고 하고 있었는데

 

Exercise Adding Sharing with an Inten 에서는 지원을 하고 있지 않습니다.

 

중요한 부분의 '21절의 Interts and Sharing 의도와 공유 내용'을 직접

연습하는 단원인데 이해하는 것이 너무 어렵게 되었습니다.

 

업데이트 노트를 보면서 참고를 해봅시다.

 

메소드 추가는 '컨트롤 + o'를 눌러서 하는 것은 쉽게 할 수 있을 것 같습니다.

 

There is mild update in the method signature, and definition of onCreateOptionsMenu().

메서드 시그니처와 onCreateOptionsMenu () 정의에 가벼운 업데이트가 있습니다.

 

See the updated definition in the instructions below.

아래 지침에서 업데이트 된 정의를 참조하십시오.

 

구글 번역기를 써가면서 진도를 나가야 겠습니다.

1번 업데이트의 내용은 이렇습니다.

 

동영상 강의와 같이 진행을 하면

setHasOptionsMenu(true) 는 붉은색 박스의 위치에 작성됩니다.

하지만 1번 업데이트를 따라서 해봅니다.

 

binding 부분은 대로 유지해도 될 것같습니다.

setHasOptionsMenu(true)를 이쪽에 붙여줍시다.

 

1분 6초 동영상 장면입니다.

 

private fun getShareIntent() : Intent {}

 

부분은 직접 타이핑을 해야하는데 Intent 부분에서 에러가 발생합니다.

 

이 부분은 가볍게 처리가 될 것 같습니다.

Alt + Enter를 눌러줍시다.

improt를 추가하면 에러가 없어집니다.

 

동영상 1분 19초에서

 

var args = GameWonFragmentArgs.FromBundle(arguments)를 입력하하고 합니다.

하지만 2. 업데이트가 있기 때문에 이부분도 똑같이 바꿔줘야합니다.

 

2번 업데이트 노트에 따르면

 

val args = GameWonFragmentArgs.fromBundle(requireArguments()) 로 바뀌었습니다.

 

2번 업데이트정보에서 위의 코드 한 줄 빼고는 바뀌는 것은 없어 보입니다.

 

개인적으로는 numCorrect 부분에서 오타를 발견했습니다.

numCurrent로 만들어 놨었었습니다.

 

나머지는 크게 바뀐 것 없이 진행하면 될 것 같습니다.

 

동영상 강의 3분 21초 화면에서 수정정보를 알려줍니다.

 

Similar to the onCreateOptionsMenu() method,

there is a slight update in the signature, and definition of onOptionsItemSelected() method.

메서드 시그니처와 onCreateOptionsMenu () 정의에 약간의 업데이트가 있습니다.

See the updated definition in the instructions below.

아래 지침에서 업데이트 된 정의를 참조하십시오.

 

2번 업데이트 다음은 3번 업데이트 노트를 보면 될 것같은데...

 

3. 업데이트 내용은 동영상 강의와 바뀐게 없습니다.

이 부분은 넘어가 봅시다.

 

4. 업데이트 내용까지 확인을 해봐야 겠네요.

가볍게 설명만 되어있고 shareIntent가 활동 되는지만 봐줍시다.

 

일단 전체적으로 에러가 보이진 않습니다.

 

 

동영상 3분 30초에서 작성한 코드를 실행해줍니다.

 

저는 지금 하는 작업을 각종 프로그램이

실행되는 장치를 만들어 주는 줄 알았는데

'공유' 버튼을 만들어서 연결해 주는 것이었습니다.

 

그럼 이제 실행을 해봅시다.

 

위쪽에 에러가 있던 것을 보고 있었는데,

여기서 실행을 한다고 넘어가 주지 않네요.

 

사실 이부분은 2. 업데이트 부분에서 부터 계속 주시를 하고 있던 부분입니다.

 

자막이 되면 동영상을 참고하겠는데 이부분의 기존 1번에서 2번으로 바꿔어 주는 작업을 하는 것이

2. 업데이트의 내용으로 추측이 됩니다.

 

하지만 3분 35초까지 코드를 실행해보는 장면까지

기존 1번의 코드를 삭제한 것처럼 보이는 장면은 없습니다.

 

이번에는 깃허브의 솔루션까지 찾아봐야겠습니다.

 

솔루션은 강의가 완전히 다 진행되어야 하는 부분이기 때문에

코드가 완전 같아 보이지 않습니다.

 

단 1번에 해당하는 Toast 코드는 없어졌고

2번에 해당하는 ShareIntent 코드만 남아있는 것이 보입니다.

 

1번에 해당하는 Toast 코드를 주석처리하면 될것 같습니다.

 

 

게임오버 화면에서는 '공유'아이콘이 생기지 않으나

3문제는 전부 다 맞추고 게임승리 화면에서는 '공유'아이콘이

생겨있는 것을 확인 했습니다.

 

만약을 위해 문제가 되었던 Toast 코드는 주석처리를 해주었습니다.

 

동영상 강의 4분 22초에서는 코드를

좀 더 짧고 이쁘게 바꿔주는 작업을 합니다.

 

 val shareIntent = Intent(Intent.ACTION_SEND)
 shareIntent.setType("text/plain")
 .putExtra(Intent.EXTRA_TEXT,
 getString(R.string.share_success_text, args.numCurrect,
 args.numQuestions))
 return shareIntent

 

이 코드를

 

return ShareCompat.IntentBuilder.from(activity)
.setText(getString(R.string.share_success_text, args.numCurrect, args.numQuestions))
.setType("text.plain")
.intent

 

이렇게 바꿔 주었습니다.

 

문제는 여기서 동영상 강의에서는 아무 문제가 없이 진행이 되지만

똑같이 실행을 하게되면 에러가 발생합니다.

 

Type mismatch 라고 뜨면서 에러가 발생합니다.

 

그래도 강의 중에 text인지 숫자인지 타입이 어쩌고 주장한 것 같은데

거기서 문제가 될 수 있다고 한 부분이 이런 것인것 같습니다.

 

업데이트 노트에서는 여기서 실행이 되지 않는 정보는 나와있지 않습니다.

 

결국은 답을 못찾고 돌아가야 할 것 같은데요.

이번에는 솔루션을 참고합시다.

 

정말로 고쳐 졌을지 몰랐는데 솔루션 코드에는 수정이 되어있습니다.

!! 두개를 주어서 강제 null 발생 OK 상태로 전환 시켜주었습니다.

 

똑같이 !!를 붙여서 에러가 발생 하였는가 지켜보겠습니다.

에러가 사라지고 activity!! 가 활성화 된 것을 알 수 있습니다.

이 부분은 바로 피드백도 넣어야 겠습니다.

 

 

코드를 수정한 후에 동영상에서 작동하는 모습을 보여주고 있습니다.

 

이제 실행을 해서 비교해 보겠습니다.

 

 

왜지? 왜 나는 '공유'아이콘을 누르면 튕기는지 알 수가 없습니다.

 

솔루션을 한줄씩 복사 붙여넣기를 하여 오타 찾기를 해보았습니다.

 

numCurrect는 오타를 알고 있었기에 문제가 되지 않았지만

.setType("text.plain") 에서 오타가 있었습니다.

 

" text . plain " 이 아니라 " text / plain " 가 맞는 것입니다.

수정 후에 다시 실행해 보겠습니다.

 

문제없이 작동되는 것을 확인했습니다.

 

역시 우선 오타를 검사를 하는게 이제는 더 빠르다는 것을 알았습니다.

 

동영상 강의 5분 02초 부터 43초까지 작성한 코드입니다.

 

2회차 어플 실행에서 제가 오타가 발생해 '공유'아이콘에서

충돌이 일어나 어플이 꺼지는 것을 보았습니다.

 

이렇게 충동이 일어나 작동이 안될 때를 방지하기 위한 코드입니다.

 

문제는 동영상과 같이 코드를 작성하였을 때,

 

따라서 작성을 하면 위와 같은 에러가 발생하는 것을 알 수 있습니다.

이번에는 업데이트 노트까 뜨지 않으니

또 솔루션 코드를 참고해야할 것같습니다.

 

비슷한 듯 비슷하지 않은 상태의 코드입니다.

왜 이 중요한 걸 업데이트 노트에 쓰지 않은 것일까요?

 

 

사실 영상에서 업데이트 노트를 참고하라는 일시정지 화면이

나오지 않은 것이지 5. 업데이트에 분명히 있는 내용입니다.

 

업데이트 내용을 살펴서 단어를 수정해 줍시다.

 

5. 업데이트 내용을 적용하게 되면 에러가 사라지는 것을 알 수 있습니다.

 

68번째 코드를 주석 처리 해주었기 때문에 충돌이 일어나야 하지만

충돌이 일어날 때 '공유'아이콘이 없는 것을 확인할 수 있습니다.

 

정상적으로 작동 할 때 '공유'아이콘이 있는 것을 볼 수 있구요.

 

그럼 우리도 코딩을 잘 했는지 실행해봅시다.

 

3회차 까지 잘 작동하는 것을 확인했습니다.

문제를 너무 많이 틀리네요.

공부가 부족합니다.

 

마지막에 문제를 다 제대로 풀고 정답을 외우도록합시다.

이번에도 오타하나 때문에 실행이 한번 안되었고

3번의 도전끝에 성공하였습니다.

 

특히 『 . 』 과 『 , 』,  『 ? 』,  『 ! 』 등등 기호를 빼먹거나

오타를 발생하는 경우가 너무 많이 발생합니다.

 

실행이 안된다?

그럼 일단 오타를 먼저 검사하는 것이 맞습니다.

 

 

 

 

댓글