Home > Blockchain >  Kotlin for Volley, how can I check the JSON request for newer data in the API?
Kotlin for Volley, how can I check the JSON request for newer data in the API?

Time:01-23

I'm working on an app that gets a list of documents/source URL from an api. I'd like to periodically check for new or updated contents within that API so users can update saved items in the database. I'm at a loss on the correct wording to search, thus Google and Stack Overflow have both failed me. My fetching function is below:

The URL for the API is 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
    }

I tried using ChatGPT to see if that would get me started and that failed miserably. Also searched Google, Reddit and Stack Overflow for similar projects, but mine is a unique scenario I guess. I'm just a hobbyist and intermediate dev I guess. First time working with Volley, everything works, but I would like to find a way to send a notification (preferably not Firebase) if there is updated info within the API listed above. I'm not sure if this is actually doable.

CodePudding user response:

Are you asking if you can somehow find if the remote API has changed its content? If so, how would that service advise you? If the service provider provides a web hook or similar callback you could write a server-based program to send a push notification to your Android app.

Perhaps you intent to poll the API periodically, and then you want to know if there is a change?

  1. If you use a tool such as Postman or curl to easily see the headers of the API https://api.afiexplorer.com you will see, unfortunately, there is no Last-Modified header or ETag header which would allow you to easily determine if there was a change.
  2. Next looking at the content of the API, the author does not provide an obvious version/change date, so no luck there.
  3. What you could do is receive the content as a String, and perform a checksum operation on it, and if it differs you know there has been a change
  4. or if you are deserialising the received JSON in Kotlin data classes, then out of the box, Kotlin will enable you to perform an equality operation on a previous copy of the data to know if there was a change.

CodePudding user response:

This looks like an android app; if so, why don't you create a background service that makes requests to the API and updates the data as needed? You can use an AlarmManager class to set the interval threshold for polling by using the setInexactRepeating() method.

Most apps are updated in this fashion; sometimes, a separate table is created to catalog changesets.

Let me know if this helps.

  • Related