Kotlin 与 Anko 未知资源和空引用



我想从 https://www.thesportsdb.com/api/v1/json/1/eventspastleague.php?id=4328 获取数据

但我有错误

java.lang.IllegalArgumentException:指定为非空的参数为 null: method kotlin.jvm.internal.Intrinsics.checkParameterIsNotNull, 参数数据位于 com.yutra.jadwalbola.last_match。LastMatchFragment.showTeamList(Unknown 来源:21( 在 com.yutra.jadwalbola.last_match。LastMatchPresenter$getTeamList$1$1.invoke(LastMatchPresenter.kt:21( 在 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()
}

最新更新