Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Select an option

  • Save qureshiayaz29/1e06814fc495c9a889a12c311b7181d4 to your computer and use it in GitHub Desktop.

Select an option

Save qureshiayaz29/1e06814fc495c9a889a12c311b7181d4 to your computer and use it in GitHub Desktop.
class MainActivity : AppCompatActivity() {
private val users = mutableListOf<User>()
private lateinit var adapter: UserAdapter
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
val recyclerView = findViewById<RecyclerView>(R.id.recyclerView)
adapter = UserAdapter(users)
recyclerView.adapter = adapter
recyclerView.layoutManager = LinearLayoutManager(this)
loadUsers()
}
private fun loadUsers() {
lifecycleScope.launch(Dispatchers.IO) {
try {
val url = URL("https://api.example.com/users")
val json = url.readText()
val jsonArray = JSONArray(json)
val fetchedUsers =
(0 until jsonArray.length()).map { i ->
jsonArray.getJSONObject(i).let {
User(it.getInt("id"), it.getString("name"), it.getString("email"))
}
}
withContext(Dispatchers.Main) {
users.clear()
users.addAll(fetchedUsers)
adapter.notifyDataSetChanged()
}
} catch (e: Exception) {
withContext(Dispatchers.Main) {
Toast
.makeText(this@MainActivity, "Error: ${e.message}", Toast.LENGTH_SHORT)
.show()
}
}
}
}
data class User(
val id: Int,
val name: String,
val email: String,
)
inner class UserAdapter(
private val items: List<User>,
) : RecyclerView.Adapter<ViewHolder>() {
override fun onCreateViewHolder(
parent: ViewGroup,
viewType: Int,
) = ViewHolder(
LayoutInflater.from(parent.context).inflate(R.layout.item_user, parent, false),
)
override fun onBindViewHolder(
holder: ViewHolder,
position: Int,
) {
holder.name.text = items[position].name
holder.email.text = items[position].email
}
override fun getItemCount() = items.size
}
class ViewHolder(
view: View,
) : RecyclerView.ViewHolder(view) {
val name: TextView = view.findViewById(R.id.tvName)
val email: TextView = view.findViewById(R.id.tvEmail)
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment