android-studio - 带有 Anko 未知资源和空引用的 Kotlin
问题描述
我想从https://www.thesportsdb.com/api/v1/json/1/eventspastleague.php?id=4328获取数据
但我有错误
java.lang.IllegalArgumentException:指定为非空的参数为空:方法 kotlin.jvm.internal.Intrinsics.checkParameterIsNotNull,com.yutra.jadwalbola.last_match.LastMatchFragment.showTeamList 中的参数数据(未知来源:21)在 com.yutra .jadwalbola.last_match.LastMatchPresenter$getTeamList$1$1.invoke(LastMatchPresenter.kt:21) at com.yutra.jadwalbola.last_match.LastMatchPresenter$getTeamList$1$1.invoke(LastMatchPresenter.kt:8)
这是我的 LastMatchDBApi
object LastMatchDBApi {
fun getMatch(): String {
return Uri.parse(BuildConfig.BASE_URL).buildUpon()
.appendPath("api")
.appendPath("v1")
.appendPath("json")
.appendPath(BuildConfig.TSDB_API_KEY)
.appendPath("eventspastleague.php")
.appendQueryParameter("id", "4328")
.build()
.toString()
}
}
这是我的连载
data class LastMatch(
@SerializedName("strEvent")
var eventName: String? = null
)
这是我的主持人
class LastMatchPresenter(private val view: MainView,
private val apiRepository: ApiRepository,
private val gson: Gson) {
fun getTeamList() {
view.showLoading()
doAsync {
val data = gson.fromJson(apiRepository
.doRequest(LastMatchDBApi.getMatch()),
LastMatchResponse::class.java
)
uiThread {
view.hideLoading()
view.showTeamList(data.lastMatch)
}
}
}
}
这是我的回应
data class LastMatchResponse(
val lastMatch: List<LastMatch>
)
这是我的片段活动
class LastMatchFragment : Fragment(), MainView {
private lateinit var progressBar: ProgressBar
private lateinit var swipeRefresh: SwipeRefreshLayout
private var lastMatch: MutableList<LastMatch> = mutableListOf()
private lateinit var adapter: MainAdapter
private lateinit var listTeam: RecyclerView
private var key : String = "4328"
companion object {
fun newInstance(): LastMatchFragment {
return LastMatchFragment()
}
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
}
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?): View? {
val view = UI {
linearLayout {
lparams (width = matchParent, height = wrapContent)
orientation = LinearLayout.VERTICAL
topPadding = dip(16)
leftPadding = dip(16)
rightPadding = dip(16)
// textView {
// text = "test image"
// }
relativeLayout{
lparams (width = matchParent, height = wrapContent)
listTeam = recyclerView {
lparams (width = matchParent, height = wrapContent)
layoutManager = LinearLayoutManager(ctx)
}
progressBar = progressBar {
}.lparams{
centerHorizontally()
}
}
}
}.view
adapter = MainAdapter(lastMatch)
listTeam.adapter = adapter
val request = ApiRepository()
val gson = Gson()
var presenter = LastMatchPresenter(this, request, gson)
presenter.getTeamList()
return view
}
override fun showLoading() {
progressBar.visible()
}
override fun hideLoading() {
progressBar.invisible()
}
override fun showTeamList(data: List<LastMatch>) {
lastMatch.clear()
lastMatch.addAll(data)
adapter.notifyDataSetChanged()
}
}
如果有人有源代码来获取这些数据,请帮助我
解决方案
在下面的代码中,您将列表作为 null 从LastMatchPresenter
类传递
view.showTeamList(data.lastMatch)
默认情况下,Kotlin中的所有变量和参数都是non-null
. 如果你想将null
参数传递给你应该添加?
到它的类型的方法,例如:
override fun showTeamList(data: List<LastMatch>?) {
lastMatch.clear()
lastMatch.addAll(data)
adapter.notifyDataSetChanged()
}
推荐阅读
- reactjs - 为什么我不能使用 require 加载本地图像?反应
- symfony - OroPlatform:覆盖 Oro 包模板
- statsmodels - 无法使用模块“DynamicFactorMQ”
- javascript - 打开菜单时如何添加 CSS 过渡?
- api - GitHub API:从邮件通知(问题、拉取请求……)中获取 thread_id
- javascript - 如何在 Google Scripts 中使用 var String 命名数组对象?
- python - TypeError: concatenate() 得到了一个意外的关键字参数“dtype”
- database - 适合物联网平台的数据库结构
- javascript - 如何从 URL 获取 JSON 并将其传递给 const 以做出反应?
- c - 为什么命令行参数在访问时会产生分段错误?