首页 > 解决方案 > 带有 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()
    }

}

如果有人有源代码来获取这些数据,请帮助我

标签: android-studioandroid-fragmentskotlinkotlin-android-extensionsanko

解决方案


在下面的代码中,您将列表作为 null 从LastMatchPresenter类传递

view.showTeamList(data.lastMatch)

默认情况下,Kotlin中的所有变量和参数都是non-null. 如果你想将null参数传递给你应该添加?到它的类型的方法,例如:

override fun showTeamList(data: List<LastMatch>?) {
        lastMatch.clear()
        lastMatch.addAll(data)
        adapter.notifyDataSetChanged()
    }

推荐阅读