[英]Can someone teach me how to apply callbacks on my current code
有人可以教我如何在我当前的代码中应用回调吗? 我试过应用它,但我很难轻松理解这个概念。 我已经制作了回调所需的接口,但我不知道下一步该怎么做。
它是一个 API 提取代码。 这段代码的主要思想是通过 volley 提取数据,然后将其添加到我的 recyclerview 的数据源列表中。
fun createDataset(): ArrayList<ItemPost>{
val url = "http://api.karawcraftventure.com/item"
// LIST DATA VARIABLE FOR RECYCLEVIEW
val list = ArrayList<ItemPost>()
// VOLLEY API REQUEST
val Queue = Volley.newRequestQueue(activity)
val jsonObject = JsonArrayRequest(
Request.Method.GET,url,null,
{response ->
try
{
for (i in 0 until response.length())
{
val item : JSONObject = response.getJSONObject(i)
val API_Image : String = item.getString("product_url_image")
val API_ItemName : String = item.getString("product_name")
val API_Price : String = item.getString("product_price")
val API_Category : String = item.getString("product_category")
// Toast Notif if data is extracted or not
//Toast.makeText(context, "$API_ItemName - $API_Price - $API_Category", Toast.LENGTH_SHORT).show()
list.add(ItemPost(API_Image, API_ItemName, API_Category, API_Price))
}
}
catch (e: JSONException)
{
e.printStackTrace()
}
},
{ error: VolleyError? -> Toast.makeText(context, error?.message.toString(), Toast.LENGTH_SHORT).show()
}
)
// Sample Data for the list
list.add(
ItemPost("https://karawcraftventure.com/uploads/ONGLO_KC1.jpg",
"Item Title1",
"Item Category1",
"Item Price1"
)
)
list.add(
ItemPost("https://karawcraftventure.com/uploads/ORIOL_KC.jpg",
"Item Title2",
"Item Category2",
"Item Price2"
)
)
list.add(
ItemPost("https://karawcraftventure.com/uploads/ORIOL_KC.jpg",
"Item Title3",
"Item Category3",
"Item Price3"
)
)
list.add(
ItemPost("https://karawcraftventure.com/uploads/ORIOL_KC.jpg",
"Item Title4",
"Item Category4",
"Item Price4"
)
)
Queue.add(jsonObject)
return list
}
这是我创建的接口代码。
interface ItemCallback {
fun GetItem(Ar: ArrayList<ItemPost>)
}
在此之前我也发布了一个问题,但仍然不足以让我想出解决方案。
更新:这是我调用函数 CreateDataset() 的地方:
private fun addDataSet()
{
val data = createDataset()
ItemAdapter.SubmitList(data)
}
然后在这里调用 addDataset()。
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
initRecyclerView()
addDataSet()
}
快速修复:由于您在一个片段中拥有所有内容,因此您可以在收到响应时在createDataset
内调用ItemAdapter.SubmitList(data)
。
fun createDataset() {
...
{ response ->
try {
for(...) {
...
list.add(...)
}
ItemAdapter.SubmitList(list)
} catch(...) {
...
}
}
...
}
private fun addDataSet() {
createDataset()
}
另一种方法:通过传递 lambda 回调:
```kotlin
fun createDataset(onSuccess: (List<ItemPost>) -> Unit) {
...
for(...) {
...
list.add(...)
}
onSuccess(list)
...
}
private fun addDataSet() {
createDataset { list ->
ItemAdapter.SubmitList(list)
}
}
这种方法比前一种方法更好,因为现在createDataset
不需要对适配器的引用。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.