인프런 커뮤니티 질문&답변

toqur7000님의 프로필 이미지
toqur7000

작성한 질문수

누구나 할 수 있는 안드로이드 앱 개발 - 1 (Kotlin)

깃허브 API

null exception

작성

·

352

0

똑같이 코드 따라치고 실행을 했는데 

null exception이 나옵니다.

 

java.lang.NullPointerException

        at com.my.githubapi.MainActivity$onCreate$1.onResponse(MainActivity.kt:31)

for(str in response?.body()?.items!!){

어떻게 해결해야되나요?

답변 2

0

개복치개발자님의 프로필 이미지
개복치개발자
지식공유자

확인해보니 문제는 없어보이는데

api.getUsers()

이 부분이 오타가 있는지 확인하기 위해, 이 부분의 스크린샷과

 

이렇게 찍은 로그가 어떻게 나오는지 알려주실 수 있으신가요?

                Log.e("MAINACTIVITY", response?.body()?.items.toString())

 

toqur7000님의 프로필 이미지
toqur7000
질문자

interface API {

@GET(":users?q=himchanyoon")
fun getUsers() : Call<UserData>
}

아 이부분에서 ':' 이부분이 에러였던것 같습니다... 감사합니다 해결하였습니다 :)

0

개복치개발자님의 프로필 이미지
개복치개발자
지식공유자

안녕하세요 

말 그대로 데이터가 null인 경우입니다.

for(str in response?.body()?.items!!){

여기 위에서

Log.d("DATA", response?.body()?.items!!.toString())

으로 데이터를 한번 확인해보시면 null이 나올겁니다.

어느 주소로 api요청을 하셨는지 전체 코드를 공유해주시면 도움드릴 수 있을 것 같아요 :) 

toqur7000님의 프로필 이미지
toqur7000
질문자

class MainActivity : AppCompatActivity() {

val BASE_URL = "https://api.github.com/search/"

override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)

val retrofit : Retrofit = Retrofit.Builder()
.baseUrl(BASE_URL)
.addConverterFactory(GsonConverterFactory.create())
.build()

var api = retrofit.create(API::class.java)

var call: Call<UserData> = api.getUsers()

call.enqueue(object : Callback<UserData> {
override fun onResponse(call: Call<UserData>, response: Response<UserData>?) {
// 호출이 실패했을 때 실행되는 코드
Log.e("MAINACTIVITY", response?.body()?.items.toString())

for(str in response?.body()?.items!!){

Log.e("MAINACTIVITY", str.login)
}

}

override fun onFailure(call: Call<UserData>?, t: Throwable?) {
//호출이 성공했을 때 실행되는 코드

}

})

}
}


강의와 똑같이 코드를 실행하였습니다.
toqur7000님의 프로필 이미지
toqur7000

작성한 질문수

질문하기