Untitled
Anonymous
kotlin
10/21/2021 5:26 AM
9.6 KB
30
Indexable
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.provider.Settings
import android.util.Log
import android.view.Menu
import android.view.MenuItem
import android.view.View
import android.widget.Toast
import androidx.recyclerview.widget.DividerItemDecoration
import androidx.recyclerview.widget.LinearLayoutManager
import com.loopj.android.http.AsyncHttpClient
import com.loopj.android.http.AsyncHttpResponseHandler
import cz.msebera.android.httpclient.Header
import kotlinx.android.synthetic.main.activity_main.*
import org.json.JSONArray
import org.json.JSONObject
class MainActivity : AppCompatActivity() {
private var listData: ArrayList<User> = ArrayList()
private lateinit var adapter: UserAdapter
companion object {
private val TAG = MainActivity::class.java.simpleName
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
adapter = UserAdapter(listData)
setupRecyclerView()
getUser()
}
private fun getUser() {
progressBar.visibility = View.VISIBLE
val client = AsyncHttpClient()
client.addHeader("User-Agent", "request")
client.addHeader("Authorization", "token GANTI_DENGAN_API_KEY")
val url = "https://api.github.com/users"
client.get(url, object : AsyncHttpResponseHandler() {
override fun onSuccess(
statusCode: Int,
headers: Array<Header>,
responseBody: ByteArray
) {
progressBar.visibility = View.INVISIBLE
val result = String(responseBody)
Log.d(TAG, result)
try {
val jsonArray = JSONArray(result)
for (i in 0 until jsonArray.length()) {
val jsonObject = jsonArray.getJSONObject(i)
val username: String = jsonObject.getString("login")
// Melakukan pemanggilan API sekali lagi untuk mendapatkan detail user
getUserDetail(username)
}
} catch (e: Exception) {
Toast.makeText(this@MainActivity, e.message, Toast.LENGTH_SHORT)
.show()
e.printStackTrace()
}
}
override fun onFailure(
statusCode: Int,
headers: Array<Header>,
responseBody: ByteArray,
error: Throwable
) {
progressBar.visibility = View.INVISIBLE
val errorMessage = when (statusCode) {
401 -> "$statusCode : Bad Request"
403 -> "$statusCode : Forbidden"
404 -> "$statusCode : Not Found"
else -> "$statusCode : ${error.message}"
}
Toast.makeText(this@MainActivity, errorMessage, Toast.LENGTH_LONG)
.show()
}
})
}
private fun getUserDetail(username: String) {
progressBar.visibility = View.VISIBLE
val client = AsyncHttpClient()
client.addHeader("User-Agent", "request")
client.addHeader("Authorization", "token GANTI_DENGAN_API_KEY")
val url = "https://api.github.com/users/$username"
client.get(url, object : AsyncHttpResponseHandler() {
override fun onSuccess(
statusCode: Int,
headers: Array<Header>,
responseBody: ByteArray
) {
progressBar.visibility = View.INVISIBLE
val result = String(responseBody)
try {
val jsonObject = JSONObject(result)
val username: String? = jsonObject.getString("login").toString()
val name: String? = jsonObject.getString("name").toString()
val avatar: String? = jsonObject.getString("avatar_url").toString()
val company: String? = jsonObject.getString("company").toString()
val location: String? = jsonObject.getString("location").toString()
val repository: String? = jsonObject.getString("public_repos")
val followers: String? = jsonObject.getString("followers")
val following: String? = jsonObject.getString("following")
listData.add(
User(
username,
name,
avatar,
company,
location,
repository,
followers,
following
)
)
showRecyclerView()
} catch (e: Exception) {
Toast.makeText(this@MainActivity, e.message, Toast.LENGTH_SHORT)
.show()
e.printStackTrace()
}
}
override fun onFailure(
statusCode: Int,
headers: Array<Header>,
responseBody: ByteArray,
error: Throwable
) {
progressBar.visibility = View.INVISIBLE
val errorMessage = when (statusCode) {
401 -> "$statusCode : Bad Request"
403 -> "$statusCode : Forbidden"
404 -> "$statusCode : Not Found"
else -> "$statusCode : ${error.message}"
}
Toast.makeText(this@MainActivity, errorMessage, Toast.LENGTH_LONG)
.show()
}
})
}
private fun setupRecyclerView() {
recycleView.layoutManager = LinearLayoutManager(recycleView.context)
recycleView.setHasFixedSize(true)
recycleView.addItemDecoration(
DividerItemDecoration(
recycleView.context,
DividerItemDecoration.VERTICAL
)
)
}
private fun showRecyclerView() {
recycleView.layoutManager = LinearLayoutManager(this)
val listDataAdapter = UserAdapter(userFilterList)
recycleView.adapter = adapter
listDataAdapter.setOnItemClickCallback(object : UserAdapter.OnItemClickCallback {
override fun onItemClicked(user: User) {
showSelectedUser(user)
}
})
}
private fun showSelectedUser(user: User) {
UserData(
user.username,
user.name,
user.avatar,
user.company,
user.location,
user.repository,
user.followers,
user.following
)
val intent = Intent(this@MainActivity, UserDetail::class.java)
intent.putExtra(UserDetail.EXTRA_DATA, user)
[email protected](intent)
}
}Editor is loading...