用Retrofit请求网络数据并展示在Recyclerview

public class MainActivity extends AppCompatActivity {
    private RecyclerView mRecyclerView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        mRecyclerView=findViewById(R.id.recyclerview);
        mRecyclerView.setLayoutManager(new LinearLayoutManager(this));

        MyApp.getmRetrofit()
                .create(FilmService.class)
                .getBean(1)
                .subscribeOn(Schedulers.io())
                .map(new Function<Bean, List<Bean.DataBean>>() {
                    @Override
                    public List<Bean.DataBean> apply(Bean bean) throws Exception {
                        List<Bean.DataBean> list=bean.getData();
                        return list;
                    }
                }).observeOn(AndroidSchedulers.mainThread())
                .subscribe(new Consumer<List<Bean.DataBean>>() {
                    
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,下面是一个使用 Kotlin 和 RecyclerView 实现多布局的例子,同时使用 Retrofit 进行网络请求: 1. 首先,你需要在项目中添加以下依赖项(在 build.gradle 文件中): ```gradle dependencies { // RecyclerView implementation 'androidx.recyclerview:recyclerview:1.2.1' // Retrofit implementation 'com.squareup.retrofit2:retrofit:2.9.0' implementation 'com.squareup.retrofit2:converter-gson:2.9.0' } ``` 2. 创建一个数据类,用于保存从网络请求中返回的数据: ```kotlin data class Item( val id: Int, val title: String, val content: String, val type: Int ) ``` 3. 创建一个接口,用于定义网络请求: ```kotlin interface ApiService { @GET("items") suspend fun getItems(): List<Item> } ``` 4. 创建一个 RecyclerView.Adapter,用于显示多种布局: ```kotlin class ItemAdapter(private val items: List<Item>) : RecyclerView.Adapter<RecyclerView.ViewHolder>() { companion object { const val TYPE_ONE = 1 const val TYPE_TWO = 2 } override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerView.ViewHolder { return when (viewType) { TYPE_ONE -> { val view = LayoutInflater.from(parent.context) .inflate(R.layout.item_type_one, parent, false) TypeOneViewHolder(view) } TYPE_TWO -> { val view = LayoutInflater.from(parent.context) .inflate(R.layout.item_type_two, parent, false) TypeTwoViewHolder(view) } else -> throw IllegalArgumentException("Invalid view type") } } override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int) { when (holder) { is TypeOneViewHolder -> { holder.bind(items[position]) } is TypeTwoViewHolder -> { holder.bind(items[position]) } } } override fun getItemViewType(position: Int): Int { return items[position].type } override fun getItemCount(): Int { return items.size } class TypeOneViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) { fun bind(item: Item) { // 绑定 Type One 视图的数据 } } class TypeTwoViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) { fun bind(item: Item) { // 绑定 Type Two 视图的数据 } } } ``` 5. 在 Activity 或 Fragment 中使用 RecyclerViewRetrofit 进行网络请求: ```kotlin class MainActivity : AppCompatActivity() { private lateinit var recyclerView: RecyclerView private lateinit var itemAdapter: ItemAdapter override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) recyclerView = findViewById(R.id.recycler_view) val apiService = Retrofit.Builder() .baseUrl("https://example.com/api/") .addConverterFactory(GsonConverterFactory.create()) .build() .create(ApiService::class.java) GlobalScope.launch(Dispatchers.Main) { try { val items = apiService.getItems() itemAdapter = ItemAdapter(items) recyclerView.adapter = itemAdapter } catch (e: Exception) { Toast.makeText(this@MainActivity, "Error: ${e.message}", Toast.LENGTH_SHORT).show() } } } } ``` 在这个例子中,我们使用了两种不同的布局:`item_type_one` 和 `item_type_two`,分别对应 Item 类型为 1 和 2。你可以通过修改布局文件和 Item 类型来添加更多的布局。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值