Quantcast
Channel: Active questions tagged rest - Stack Overflow
Viewing all articles
Browse latest Browse all 3637

How do I resolve this NullPointerException related to retrofit2.DefaultCallAdapterFactory$ExecutorCallbackCall

$
0
0

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.


Viewing all articles
Browse latest Browse all 3637

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>