使用Kotlin進行網路請求+Glide載入圖片
阿新 • • 發佈:2019-02-12
compile 'io.reactivex.rxjava2:rxandroid:2.0.1' compile 'io.reactivex.rxjava2:rxjava:2.1.7' compile 'com.squareup.retrofit2:retrofit:2.3.0' compile 'com.squareup.retrofit2:adapter-rxjava2:2.3.0' compile 'com.squareup.retrofit2:converter-gson:2.3.0' // compile 'com.google.code.gson:gson:2.8.2' compile 'com.liaoinstan.springview:library:1.2.6'compile 'com.github.liuguangqiang.SuperRecyclerView:super-recyclerview:0.1.2' compile 'com.github.bumptech.glide:glide:3.7.0'
Bean
package app.my.com.kotlin /** * Created by lenovo on 2017/12/14. */ data class Bean( val msg: String, val code: String, //0 val data: List<Data> ) data classData( val cid: Int, //1 val createtime: String, //2017-10-10T19:41:39 val icon: String, //http://120.27.23.105/images/category/shop.png val ishome: Int, //1 val name: String //京東超市 )
IService
package app.my.com.kotlin import io.reactivex.Observable import okhttp3.ResponseBody import retrofit2.http.GET /** * Created by lenovo on 2017/12/14.*/ interface IService { //http://120.27.23.105/product/getCatagory @GET("/product/getCatagory") fun getData() : Observable<ResponseBody> }
MainActivity
package app.my.com.kotlin import android.support.v7.app.AppCompatActivity import android.os.Bundle import android.support.v7.widget.LinearLayoutManager import com.google.gson.Gson import io.reactivex.android.schedulers.AndroidSchedulers import io.reactivex.schedulers.Schedulers import kotlinx.android.synthetic.main.activity_main.* import retrofit2.Retrofit import retrofit2.adapter.rxjava2.RxJava2CallAdapterFactory class MainActivity : AppCompatActivity() { lateinit var adapter : IAdapter override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) recyclerview.layoutManager = LinearLayoutManager(this,LinearLayoutManager.VERTICAL,false) adapter = IAdapter(this) recyclerview.adapter =adapter getData() } fun getData(){ var retrofit = Retrofit.Builder() .baseUrl("http://120.27.23.105") .addCallAdapterFactory(RxJava2CallAdapterFactory.create()) .build() var iservice : IService = retrofit.create(IService::class.java) iservice.getData() .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .subscribe( { next -> var result = next.string() println(result) var gson = Gson() var bean = gson.fromJson(result,Bean::class.java) adapter.addData(bean) } , { t -> } ) } }
IAdapter
package app.my.com.kotlin import android.content.Context import android.support.v7.widget.RecyclerView import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import android.widget.ImageView import android.widget.TextView import com.bumptech.glide.Glide /** * Created by lenovo on 2017/12/14. */ class IAdapter(context1 : Context) : RecyclerView.Adapter<IAdapter.IViewHodler>() { var context : Context = context1 var list : ArrayList<Data> = ArrayList() fun addData(bean: Bean) { list.addAll(bean.data) notifyDataSetChanged() } override fun onCreateViewHolder(parent: ViewGroup?, viewType: Int): IViewHodler { // TODO("not implemented") //To change body of created functions use File | Settings | File Templates. var view = LayoutInflater.from(context).inflate(R.layout.layout,parent,false) return IViewHodler(view) } override fun onBindViewHolder(holder: IViewHodler?, position: Int) { // TODO("not implemented") //To change body of created functions use File | Settings | File Templates. holder!!.item_textview.setText(list.get(position).name) Glide.with(context).load(list.get(position).icon).into(holder!!.item_imageview) } override fun getItemCount(): Int { // TODO("not implemented") //To change body of created functions use File | Settings | File Templates. return list.size } class IViewHodler(view : View) : RecyclerView.ViewHolder(view) { lateinit var item_imageview : ImageView lateinit var item_textview : TextView init { item_imageview = view.findViewById(R.id.item_imageview) item_textview = view.findViewById(R.id.item_textview) } } }