我正在尝试从API获取一些数据,由于我将此回调指向空响应,因此出现以下错误:
E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.newsapp.develop, PID: 19479
java.lang.NullPointerException: Attempt to invoke interface method 'boolean java.util.Collection.isEmpty()' on a null object reference
at com.example.newsapp.API.NewsRemoteDataSource$getNewsList$1.onResponse(NewsRemoteDataSource.kt:21)
at retrofit2.DefaultCallAdapterFactory$ExecutorCallbackCall$1.lambda$onResponse$0$DefaultCallAdapterFactory$ExecutorCallbackCall$1(DefaultCallAdapterFactory.java:89)
at retrofit2.-$$Lambda$DefaultCallAdapterFactory$ExecutorCallbackCall$1$hVGjmafRi6VitDIrPNdoFizVAdk.run(Unknown Source:6)
at android.os.Handler.handleCallback(Handler.java:873)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:214)
at android.app.ActivityThread.main(ActivityThread.java:7094)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:494)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:975)
如何在保持功能的同时修复它?这意味着,保持回调,并获得On成功的结果。
这是带有回调的适配器:
package com.example.newsapp.Adapters
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.ImageView
import android.widget.TextView
import androidx.recyclerview.widget.RecyclerView
import com.example.newsapp.ArticlesData
import com.example.newsapp.R
import com.example.newsapp.databinding.NewsItemBinding
import com.squareup.picasso.Picasso
class RecyclerAdapter (private var Articles: List<ArticlesData>) : RecyclerView.Adapter<RecyclerAdapter.ViewHolder>(){
inner class ViewHolder(
view: View
): RecyclerView.ViewHolder(view){
private val binding = NewsItemBinding.bind(view)
val itemTitle: TextView = binding.tvTitle
val itemImage: ImageView = binding.ivNewsImage
fun bind(articles: ArticlesData){
Picasso.get().load(articles.urlToImage).into(binding.ivNewsImage)
itemTitle.text = articles.Title
}
}
interface Callback {
fun onArticleClicked(articleClicked: ArticlesData)
}
var callback: Callback? = null
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
val v = LayoutInflater.from(parent.context).inflate(R.layout.news_item, parent, false)
return ViewHolder(v)
}
override fun onBindViewHolder(holder: ViewHolder, position: Int) {
holder.bind(Articles[position])
holder.itemImage.setOnClickListener {
callback?.onArticleClicked(Articles[position])
}
}
override fun getItemCount(): Int {
return Articles.size
}
fun setNewsList(newList: List<ArticlesData>) {
this.Articles = newList
notifyDataSetChanged()
}
}
这是问题产生的远程数据源:
package com.example.newsapp.API
import com.example.newsapp.ArticlesData
import com.example.newsapp.NewsListResponse
import retrofit2.Call
import retrofit2.Callback
import retrofit2.Response
class NewsRemoteDataSource {
fun getNewsList(networkResponse: NetworkResponse<List<ArticlesData>>) {
val service = RetrofitServices.instance
.create(APIService::class.java)
.getNewsList()
service.enqueue(object : Callback<NewsListResponse> {
override fun onResponse(
call: Call<NewsListResponse>,
response: Response<NewsListResponse>
) {
val resource = response.body()?.run {
if (results.isNotEmpty())
Resource(NetworkStatus.SUCCESS, results)
else
Resource(NetworkStatus.ERROR)
} ?: run {
Resource(NetworkStatus.ERROR)
}
networkResponse.onResponse(resource)
}
override fun onFailure(call: Call<NewsListResponse>, t: Throwable) {
networkResponse.onResponse(Resource(NetworkStatus.ERROR, message = t.message))
}
})
}
}
interface NetworkResponse<T> {
fun onResponse(value: Resource<T>)
}
API响应:
data class NewsResponse (
@SerializedName("status") var Status: String,
@SerializedName("totalResults") var totalResults: Int,
@SerializedName("articles") var Articles: List<ArticlesData>
)
@Parcelize
data class ArticlesData (
@SerializedName("source") var Source: @RawValue SourceData,
@SerializedName("author") var Author: String? = " ",
@SerializedName("title") var Title: String,
@SerializedName("description") var Description: String,
@SerializedName("url") var Url: String,
@SerializedName("urlToImage") var urlToImage: String? =" ",
@SerializedName("publishedAt") var publishedAt: String,
@SerializedName("content") var Content: String? = " "
) : Parcelable
data class SourceData (
@SerializedName("name") var Name: String,
)
data class NewsListResponse(
val results: List<ArticlesData>
)
由于某种原因,结果
似乎为空
,您需要将if条件修改为
if (results.isNullOrEmpty())
Resource(NetworkStatus.ERROR)
else
Resource(NetworkStatus.SUCCESS, results)
这会导致异常,因为结果可能为空
我正在开发一个具有蓝牙功能的应用程序。我使用一个片段来扫描并列出蓝牙设备。单击时,会回调到提供所选蓝牙设备的主要活动。 我一开始使用的是Android 6(API 23)的智能手机,然后不得不调整代码以适应Android 5.0(API 21)的使用。 我只是将minSDK更改为API21并重新构建了项目,没有任何问题。 该应用程序在智能手机上运行时没有任何问题。安装了Android5的平板电脑运
我是Android的新手,我正在开发一个应用程序,该应用程序试图连接服务器并获取Json响应,将其解析为类并使其可用。 为此,我上了三门课 公共类顾客{} 公共类ServerConnect{} 公共类JsonParser{} Serverconnect使用Volley库在异步线程上下载网页源代码。下载后,Server Connect类启动OnServerResponsed(String Respo
问题内容: 我收到以下错误 尝试在空对象引用上调用虚拟方法’void android.widget.StackView.setAdapter(android.widget.Adapter)’ 在这条线上 完整的片段 EventsFragment.java 是 Stack_Adapter.java Stack_Items 问题答案: 您正在执行: 你是。返回。 你为什么用? 在哪里?您应该从正确的x
我在使用 firebase firestore 时收到一个空指针引用,我的应用崩溃了。这是我的代码: 这里的sem指的是我的文档17030121084中的字段。 有人能对此提出解决方案吗?
我的应用程序有问题,想解决它,但我无法访问解决方案,请帮帮我,,
我的应用程序有问题,我想解决它,但我无法访问解决方案,请帮助我,,,