I have this observer for my viewmodel so that I can setup my adapter but, when I run the app, it gives me the NullPointerException error on this line:
japaneseAdapter = it.data?.let { it1 -> JapaneseAdapter(it1) }!!
This is the activity with that line:
@AndroidEntryPoint
class JapaneseActivity : AppCompatActivity() {
   private lateinit var binding: ActivityJapaneseBinding
   private val japaneseViewModel by viewModels<JapaneseViewModel>()
   private lateinit var japaneseAdapter: JapaneseAdapter
   override fun onCreate(savedInstanceState: Bundle?) {
       super.onCreate(savedInstanceState)
       binding = ActivityJapaneseBinding.inflate(layoutInflater)
       setContentView(binding.root)
       japaneseViewModel.japaneseResponse.observe(this, {
           when(it.status){
               Resource.Status.LOADING -> { }
               Resource.Status.SUCCESS -> {
                   japaneseAdapter = it.data?.let { it1 -> JapaneseAdapter(it1) }!!
                   binding.rvNews.adapter = japaneseAdapter
               }
               Resource.Status.ERROR -> { Log.d("ERROR","ERROR RAISED") }
           }
       })
   }
}
This is the adapter:
class JapaneseAdapter(private var japaneseResponse: List<JapaneseResponse>) :
    RecyclerView.Adapter<JapaneseAdapter.ViewHolder>() {
    inner class ViewHolder(
        view: View
    ) : RecyclerView.ViewHolder(view) {
        private val binding = NewsItemsBinding.bind(view)
        private val itemTitle: TextView = binding.tvTitle
        private val itemImage: ImageView = binding.ivNews
        private val itemDescription: TextView = binding.tvDescription
        fun bind(response: JapaneseResponse) {
            Picasso.get().load(response.urlToImage).into(itemImage)
            itemTitle.text = response.Title
            itemDescription.text = response.Description
        }
    }
    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
        val v = LayoutInflater.from(parent.context).inflate(R.layout.news_items, parent, false)
        return ViewHolder(v)
    }
    override fun onBindViewHolder(holder: ViewHolder, position: Int) {
        holder.bind(japaneseResponse[position])
    }
    override fun getItemCount(): Int {
        return japaneseResponse.size
    }
}
Generic data source:
abstract class BaseDataSource {
    protected suspend fun <T> getResult(call: suspend () -> Response<ApiResponse<T>>): Resource<T> {
        try {
            val response = call()
//            if(response.isSuccessful) {
//                val body = response.body()?.data
//                if(body != null) return Resource.success(body)
//            }
            val body = response.body()?.data
            return Resource.success(body)
            //return Resource.error("${response.code()}: ${response.message()}")
        } catch (e: Exception) {
            return Resource.error(e.message ?: "Generic error")
        }
    }
}
data class Resource<out T>(val status: Status, val data: T?, val message: String?) : Serializable {
    enum class Status {
        SUCCESS,
        ERROR,
        LOADING
    }
    companion object {
        fun <T> success(data: T?): Resource<T> {
            return Resource(
                Status.SUCCESS,
                data,
                null
            )
        }
        fun <T> error(message: String, data: T? = null): Resource<T> {
            return Resource(
                Status.ERROR,
                data,
                message
            )
        }
        fun <T> loading(data: T? = null): Resource<T> {
            return Resource(
                Status.LOADING,
                data,
                null
            )
        }
    }
    fun isSuccessful() = status == Status.SUCCESS
    fun isError() = status == Status.ERROR
    fun isLoading() = status == Status.LOADING
}
The data source for the Japanese news:
class JapaneseDataSource @Inject constructor(private val japaneseService: JapaneseService) :
    BaseDataSource() {
    suspend fun getJpNews() = getResult { japaneseService.jpNews() }
}
Repository:
class JapaneseRepository @Inject constructor(
    private val remote: JapaneseDataSource
) {
    suspend fun jpNews() =
        remote.getJpNews()
}
The service:
interface JapaneseService {
    @GET("/v2/top-headlines?country=jp&apiKey=77acc490875643c5b2328fb615e0cf83")
    suspend fun jpNews(): Response<ApiResponse<List<JapaneseResponse>>>
}
I can see that the response is there since I have okhttp logging it for me but for some reason it seems to be null and I am not sure why... Any help?
 
    