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项目,部分代码写的不足的地方欢迎大家指正。

源码:https://download.csdn.net/download/cherfz/13117682

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值