gson Kotlinfor Volley,我如何检查JSON请求中的API更新数据?

mm9b1k5b  于 2023-01-26  发布在  Kotlin
关注(0)|答案(2)|浏览(143)

我正在开发一个应用程序,它可以从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上面列出的。我不知道这是否实际可行。

2nc8po8w

2nc8po8w1#

您是否在询问是否可以通过某种方式发现远程API是否更改了其内容?如果可以,该服务将如何建议您?如果服务提供商提供了Web钩子或类似的回调,您可以编写一个基于服务器的程序来向您的Android应用发送推送通知。
也许您打算定期轮询API,然后您想知道是否有更改?
1.如果您使用Postman或curl等工具来轻松查看API https://api.afiexplorer.com的头文件,那么您会发现,不幸的是,没有Last-Modified头文件或ETag头文件可以让您轻松确定是否存在更改。
1.接下来看API的内容,作者没有提供明显的版本/更改日期,所以在那里没有运气。
1.您可以做的是接收字符串形式的内容,并对它执行校验和操作,如果它不同,您就知道发生了更改
1.或者,如果您正在Kotlindata类中反序列化接收到的JSON,那么开箱即用,Kotlin将使您能够对数据的先前副本执行相等操作,以了解是否存在更改。

fiei3ece

fiei3ece2#

这看起来像一个安卓应用程序;如果是这样,为什么不创建一个后台服务来向API发出请求并根据需要更新数据呢?可以使用AlarmManager类通过setInexactRepeating()方法设置轮询的间隔阈值。
大多数应用程序都以这种方式更新;有时会创建单独的表来对变更集进行编目。
如果有帮助就告诉我。

相关问题