Android Kotlin retrofit2 網路請求學習獲取微博熱搜列表
最近在學習Kotlin,由於公司的專案全都是java,所以自己動手擼了一個微博熱搜列表熟悉一下Kotlin網路請求模組,在此記錄一下。
廢話不多說,上程式碼。
首先匯入相關的庫
// Retrofit
implementation 'com.squareup.retrofit2:retrofit:2.5.0'
// Retrofit和jxjava關聯
implementation 'com.squareup.retrofit2:adapter-rxjava2:2.4.0'
// Retrofit使用Gson轉換
implementation 'com.squareup.retrofit2:converter-gson:2.4.0'
// RxJava
implementation 'io.reactivex.rxjava2:rxjava:2.2.13'
// RxAndroid
implementation 'io.reactivex.rxjava2:rxandroid:2.1.1'
//glide
implementation 'com.github.bumptech.glide:glide:4.9.0'
//BRVAH
implementation 'com.github.CymChad:BaseRecyclerViewAdapterHelper:3.0.4'
然後再擼一個BaseActivity,這裡用一下DataBinding,省去findviewById。然後初始化OkHttpClient和Retrofit,資料來源這裡我使用的是天行資料,大家可以註冊一個,部分API每天100次免費呼叫。還有ApiService介面列表也新增一下,介面為 weibohot/index,Bean拿返回的Json生成一下。
open class BaseActivity<AB : ViewDataBinding> : AppCompatActivity() {
lateinit var binding: AB
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
}
fun setLayout(activity: Activity, layoutId: Int) {
binding = DataBindingUtil.setContentView(activity, layoutId);
}
fun showToast(msg: String) {
Toast.makeText(applicationContext, msg, Toast.LENGTH_SHORT).show()
}
fun startActivity(clazz: Class<*>) {
startActivity(Intent(this, clazz))
}
var client = OkHttpClient()
var mRetrofit: Retrofit = Retrofit.Builder()
.baseUrl(Constant.BASE_URL)
.client(client)
.addConverterFactory(GsonConverterFactory.create())
.addCallAdapterFactory(RxJava2CallAdapterFactory.create())
.build()
val apiService: ApiService = mRetrofit.create(ApiService::class.java)
}
interface ApiService {
@GET("weibohot/index")
fun getWeiboHot(
@Query("key") key: String?
): Call<WeiboHotBean>
}
object Constant {
const val TIANAPI_KEY = "you_key"
const val BASE_URL = "http://api.tianapi.com/txapi/"
}
然後開擼微博列表,使用BRVAH庫,把Adapter寫出來,itemView也很簡單,三個TextView,這裡就不放了。
class WeiboHotAdapter(layoutResId: Int) : BaseQuickAdapter<HotBean, BaseViewHolder>(layoutResId) {
override fun convert(holder: BaseViewHolder, item: HotBean) {
holder.setText(R.id.tv_num, (holder.adapterPosition + 1).toString())
.setText(R.id.tv_name, item.hotword)
.setText(R.id.tv_hot, item.hotwordnum)
}
}
最後開發WeiboHotActivity,佈局就一個RecyclerView,沒啥好說的。初始化一下RecyclerView 與Adapter,然後直接使用BaseActivity 裡初始化好的 apiService.getWeiboHot ,入參填自己的key,在onResponse裡setAdapter即可。這裡點選事件對應的是直接跳轉微博,如何跳轉微博搜尋結果知道的老哥可以回覆一下。
class WeiboHotActivity : BaseActivity<ActivityWeiboBinding>() {
lateinit var mAdapter: WeiboHotAdapter
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setLayout(this, R.layout.activity_weibo)
title = "微博熱搜"
binding.rv.layoutManager = LinearLayoutManager(binding.rv.context)
binding.rv.itemAnimator = DefaultItemAnimator()
mAdapter = WeiboHotAdapter(R.layout.item_weibo_hot)
mAdapter.setOnItemClickListener() { adapter, view, position -> toWeibo() }
apiService.getWeiboHot(Constant.TIANAPI_KEY)
.enqueue(object : Callback<WeiboHotBean> {
override fun onFailure(call: Call<WeiboHotBean>, t: Throwable) {
showToast(t.message.toString())
}
@SuppressLint("SetTextI18n")
override fun onResponse(
call: Call<WeiboHotBean>,
response: Response<WeiboHotBean>
) {
response.body()?.newslist?.let {
mAdapter.setList(it)
binding.rv.adapter = mAdapter;
}
}
}
)
}
fun toWeibo() {
val intent = Intent()
intent.action = Intent.ACTION_VIEW
intent.addCategory("android.intent.category.DEFAULT")
intent.data = Uri.parse("sinaweibo://splash")
this.startActivity(intent)
}
}
至此,大功告成,由於是練手的Kotlin專案,部分程式碼寫的不足的地方歡迎大家指正。
相關文章
- Android網路請求(4) 網路請求框架VolleyAndroid框架
- Android網路請求(終) 網路請求框架RetrofitAndroid框架
- Android網路請求(3) 網路請求框架OkHttpAndroid框架HTTP
- Android網路請求(2)Android
- Android中用Kotlin Coroutine(協程)和Retrofit進行網路請求和取消請求AndroidKotlin
- Android使用Kotlin+Retrofit+Rxjava實現簡單的網路請求AndroidKotlinRxJava
- node學習之路(一)—— 網路請求
- Python 超簡單爬取微博熱搜榜資料Python
- Kotlin中Retrofit網路請求簡單封裝Kotlin封裝
- android 網路請求時,顯示progrossBarAndroidROS
- 微信小程式 獲取微信暱稱頭像 獲取openid 封裝請求post微信小程式封裝
- python requests get請求 如何獲取所有請求Python
- Flutter筆記: 獲取網路資料及渲染列表Flutter筆記
- Flutter學習(7)——網路請求框架Dio簡單使用Flutter框架
- vue獲取微博授權URLVue
- Kotlin + 協程 + Retrofit + MVVM優雅的實現網路請求KotlinMVVM
- Retrofit + Kotlin + MVVM 的網路請求框架的封裝嘗試KotlinMVVM框架封裝
- spring mvc中獲取請求URLSpringMVC
- 網路請求了
- 網路請求優化之取消請求優化
- curl 請求獲取響應時間
- 表單請求獲取路由引數路由
- Python 教你動態展示微博熱搜排名變化Python
- python爬蟲獲取百度熱搜Python爬蟲
- HTTP網路請求原理HTTP
- 網路資料請求
- Flutter 熱門網路請求框架Dio的簡單封裝Flutter框架封裝
- 上萬條資料撕開微博熱搜的真相!
- 使用Python獲取HTTP請求頭資料PythonHTTP
- Flutter學習之事件迴圈機制、資料庫、網路請求Flutter事件資料庫
- Flutter 高效自學筆記(三)——網路請求Flutter筆記
- Android 無需申請key直接呼叫微信/QQ/微博分享Android
- Postman模擬瀏覽器網頁請求並獲取網頁資料Postman瀏覽器網頁
- 學習AJAX必知必會(3)~自動重啟工具nodemon、快取問題、請求超時和網路異常、取消重複請求快取
- 學習之路 / handle請求
- OC:封裝網路請求封裝
- iOS 使用Moya網路請求iOS
- Jest中Mock網路請求Mock