我正在开发一个应用程序,它可以从API中获取文档/源URL列表。我想定期检查API中的新内容或更新内容,以便用户可以更新数据库中保存的项目。我不知道搜索的正确措辞,因此Google和Stack Overflow都失败了。我的获取函数如下:
API的URL为https://api.afiexplorer.com
private fun fetchPubs() {
_binding.contentMain.loading.visibility = View.VISIBLE
request = JsonArrayRequest(
Request.Method.GET,
Config.BASE_URL,
JSONArray(),{ response ->
val items: List<Pubs> =
Gson().fromJson(response.toString(), object : TypeToken<List<Pubs>>() {}.type)
val sortedItems = items.sortedWith(compareBy { it.Number })
pubsList?.clear()
pubsList?.addAll(sortedItems)
// Hardcoded pubs moved to Publications Gitlab Repo
// https://gitlab.com/afi-explorer/pubs
_binding.contentMain.recyclerView.recycledViewPool.clear()
adapter?.notifyDataSetChanged()
_binding.contentMain.loading.visibility = View.GONE
setupData()
Log.i("LENGTH OF DATA", "${items.size}")
},
{error ->
println(error.printStackTrace())
Toasty.error(applicationContext, getString(string.no_internet), Toast.LENGTH_SHORT, true).show()
}
)
MyApplication.instance.addToRequestQueue(request!!)
}
private fun setupData(){
adapter = MainAdapter(applicationContext, pubsList!!, this)
_binding.contentMain.recyclerView.adapter = adapter
}
我尝试使用ChatGPT,看看这是否会让我开始,但失败得很惨。也搜索了谷歌,Reddit和Stack Overflow类似的项目,但我想我的是一个独特的场景。我只是一个业余爱好者和中级开发我猜。第一次与Volley,一切工作,但我想找到一种方法来发送通知(最好不是Firebase),如果有更新的信息在API上面列出的。我不知道这是否实际可行。
2条答案
按热度按时间2nc8po8w1#
您是否在询问是否可以通过某种方式发现远程API是否更改了其内容?如果可以,该服务将如何建议您?如果服务提供商提供了Web钩子或类似的回调,您可以编写一个基于服务器的程序来向您的Android应用发送推送通知。
也许您打算定期轮询API,然后您想知道是否有更改?
1.如果您使用Postman或
curl
等工具来轻松查看API https://api.afiexplorer.com的头文件,那么您会发现,不幸的是,没有Last-Modified
头文件或ETag
头文件可以让您轻松确定是否存在更改。1.接下来看API的内容,作者没有提供明显的版本/更改日期,所以在那里没有运气。
1.您可以做的是接收字符串形式的内容,并对它执行校验和操作,如果它不同,您就知道发生了更改
1.或者,如果您正在Kotlindata类中反序列化接收到的JSON,那么开箱即用,Kotlin将使您能够对数据的先前副本执行相等操作,以了解是否存在更改。
fiei3ece2#
这看起来像一个安卓应用程序;如果是这样,为什么不创建一个后台服务来向API发出请求并根据需要更新数据呢?可以使用
AlarmManager
类通过setInexactRepeating()
方法设置轮询的间隔阈值。大多数应用程序都以这种方式更新;有时会创建单独的表来对变更集进行编目。
如果有帮助就告诉我。