Ahmed Abdeen
Ahmed Abdeen

Reputation: 356

Attempt to invoke interface method 'java.lang.Object[] java.util.Collection.toArray()' on a null object reference (on release only)

I'm using Kotlin in my project. I'm getting this error only on the release version. In the debug version, everything works perfectly. It happens on this line:

postList.addAll(response.body()!!.data)

I previously initialized it like this:

val postList: MutableList<Post> = mutableListOf()

Any idea why this is happening?

Here is the full code

    private fun initRecyclerView(){
        adapter = PostsAdapter(context!!, postList)
        val linearLayoutManager = LinearLayoutManager(context)
        rvPosts.layoutManager = linearLayoutManager
        rvPosts.adapter = adapter
    }

    private fun getPosts(){

        swipToRefresh.isRefreshing = true

        disposable.add(
            apiService.getPostsFeed(
                Config.token)
                .subscribeOn(Schedulers.io())
                .observeOn(AndroidSchedulers.mainThread())
                .subscribeWith(object: DisposableSingleObserver<Response<PostData>>() {
                    override fun onSuccess(response: Response<PostData>) {
                        swipToRefresh.isRefreshing = false

                        when {
                            response.isSuccessful -> {
                                postList.clear()
                                if(response.body() != null){
                                    postList.addAll(response.body()!!.data)
                                    adapter.notifyDataSetChanged()
                                    noPostsLayout.visibility = View.GONE
                                }
                            }
                            response.code() == 404 -> {
                                noPostsLayout.visibility = View.VISIBLE
                            }
                            else -> {
                                Toast.makeText(
                                    context,
                                    getString(R.string.error_general_failure),
                                    Toast.LENGTH_LONG
                                ).show()
                                noPostsLayout.visibility = View.GONE
                            }
                        }
                    }

                    override fun onError(e: Throwable) {
                        Timber.d("onError ${e.message}")
                        swipToRefresh.isRefreshing = false
                        if(!Config.isNetworkConnected(context!!)){
                            Toast.makeText(context, getString(R.string.error_internet_connection), Toast.LENGTH_LONG).show()
                        }else{
                            Toast.makeText(context, getString(R.string.error_server_connection), Toast.LENGTH_LONG).show()
                        }
                    }

                })
        )

    }

Upvotes: 1

Views: 689

Answers (1)

MMG
MMG

Reputation: 3268

Try postList.addAll(response.body()?.data?) or postList.addAll(response.body()!!.data?)

Upvotes: 1

Related Questions