I am trying to make a Pokedex app that fetches pokemon data from API using retrofit2.It logs the following error when I try to run itError:
FATAL EXCEPTION: main Process: com.example.pokemonapp, PID: 10766 java.lang.NullPointerException: Parameter specified as non-null is null: method com.example.pokemonapp.PokeAdapter.<init>, parameter pokes at com.example.pokemonapp.PokeAdapter.<init>(Unknown Source:7) at com.example.pokemonapp.MainActivity$getPokemon$1.onResponse(MainActivity.kt:31) at retrofit2.DefaultCallAdapterFactory$ExecutorCallbackCall$1.lambda$onResponse$0$retrofit2-DefaultCallAdapterFactory$ExecutorCallbackCall$1(DefaultCallAdapterFactory.java:89) at retrofit2.DefaultCallAdapterFactory$ExecutorCallbackCall$1$$ExternalSyntheticLambda0.run(Unknown Source:6) at android.os.Handler.handleCallback(Handler.java:958) at android.os.Handler.dispatchMessage(Handler.java:99) at android.os.Looper.loopOnce(Looper.java:205) at android.os.Looper.loop(Looper.java:294) at android.app.ActivityThread.main(ActivityThread.java:8177) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:552) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:971)
MainActivity.kt
class MainActivity : AppCompatActivity() { lateinit var adapter: PokeAdapter override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) getPokemon() } private fun getPokemon() { val pokeball: Call<PokeApiResponse> = PokeInterface.ApiService.pokeInstance.getPokemonList() pokeball.enqueue(object: Callback<PokeApiResponse> { override fun onResponse( call: Call<PokeApiResponse>, response: Response<PokeApiResponse> ) { val pokedex = response.body() if(pokedex!= null) { Log.d("CHECK", pokeball.toString()) adapter = PokeAdapter(this@MainActivity, pokedex.pokemons) val pokeList = findViewById<RecyclerView>(R.id.pokemonList) pokeList.adapter = adapter pokeList.layoutManager = LinearLayoutManager(this@MainActivity) } } override fun onFailure(call: Call<PokeApiResponse>, t: Throwable) { Log.d("CHECK", "Error in fetching Pokemon", t) } }) } }
ApiService.kt
const val BASE_URL = "https://raw.githubusercontent.com/Biuni/PokemonGO-Pokedex/master/"interface PokeInterface{ @GET("pokedex.json") fun getPokemonList() : Call<PokeApiResponse> //https://raw.githubusercontent.com/Biuni/PokemonGO-Pokedex/master/pokedex.json object ApiService{ val pokeInstance: PokeInterface init{ val retrofit = Retrofit.Builder() .baseUrl(BASE_URL) .addConverterFactory(GsonConverterFactory.create()) .build() pokeInstance = retrofit.create(PokeInterface::class.java) } }}
PokeApiResponse.kt
data class PokeApiResponse( val pokemons: List<Poke>)
Poke.kt
data class Poke( val name: String, val img: String)
PokeAdapter.kt
class PokeAdapter(val context: Context, val pokes: List<Poke>): RecyclerView.Adapter<PokeAdapter.PokemonViewHolder>() { override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): PokemonViewHolder { val view = LayoutInflater.from(context).inflate(R.layout.item_layout, parent, false) return PokemonViewHolder(view) } override fun getItemCount(): Int { return pokes.size } override fun onBindViewHolder(holder: PokemonViewHolder, position: Int) { val pokemon = pokes[position] holder.pokeTitle.text = pokemon.name } class PokemonViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) { var pokeImage = itemView.findViewById<ImageView>(R.id.pokeImage) var pokeTitle = itemView.findViewById<TextView>(R.id.pokeName) }}
build.gradle
implementation ("com.squareup.retrofit2:retrofit:2.9.0")implementation ("com.squareup.retrofit2:converter-gson:2.9.0")
In MainActivity.kt I try logging the data fetched using the tag "CHECK", it logs the following message:
retrofit2.DefaultCallAdapterFactory$ExecutorCallbackCall@6d104a9
Earlier when I hadn't implemented RecyclerView
, retrofit was fetching the data correctly and the fetched data was also logged correctly under the tag "CHECK", however now it keeps giving the DefaultCallAdapterFactory$ExecutorCallbackCall
message.
I have spent hours trying to find a solution online, but nothing works.Any help in this regard would be appreciated.