Android MVVM demo(使用DataBinding,LiveData,Fresco,RecyclerView,Room,ViewModel 完成)

使用DataBinding,LiveData,Fresco,RecyclerView,Room,ViewModel 完成

玩Android 开放API-玩Android - wanandroid.com

接口使用的是下面的两个:

https://www.wanandroid.com/banner/jsonicon-default.png?t=O83Ahttps://www.wanandroid.com/banner/json

wanandroid.com/project/list/1/json?cid=294icon-default.png?t=O83Ahttps://www.wanandroid.com/project/list/1/json?cid=294

需求列表:

现在我需要使用kotlin 来完成下面的需求,使用mvvm的模式,要求使用databinding,viewmodel,livedata,fresco,room,retrofit来完成

1:主页显示https://www.wanandroid.com/banner/json 的数据
使用recyclerView 来展示每一个banner,其中banner内部使用databinding
使用fresco 来加载对应的图片
使用retrofit 来下载数据,下载后要求数据保存在room里面,如果数据在数据库中没有,那么就添加,如果已经有了就更新当前的数据,primarykey 是id
使用viewmode 

有一个按钮“刷新banner” 会再次拉取https://www.wanandroid.com/banner/json  来刷新,使用databinding来刷新

2:主页还要显示https://www.wanandroid.com/project/list/1/json?cid=294的数据
使用recyclerView 来展示每一个project,其中project内部使用databinding
使用fresco 来加载对应的图片
使用retrofit 来下载数据,下载后要求数据保存在room里面,如果数据在数据库中没有,那么就添加,如果已经有了就更新当前的数据,primarykey 是id
使用viewmode 

有一个按钮“刷新banner” 会再次拉取 https://www.wanandroid.com/project/list/1/json?cid=294 来刷新,使用databinding来刷新



1:https://www.wanandroid.com/banner/json
数据格式如下:
{
  "data": [
    {
      "desc": "我们支持订阅啦~",
      "id": 30,
      "imagePath": "https://www.wanandroid.com/blogimgs/42da12d8-de56-4439-b40c-eab66c227a4b.png",
      "isVisible": 1,
      "order": 2,
      "title": "我们支持订阅啦~",
      "type": 0,
      "url": "https://www.wanandroid.com/blog/show/3352"
    }
  ],
  "errorCode": 0,
  "errorMsg": ""
}

2:https://www.wanandroid.com/project/list/1/json?cid=294
数据格式如下:
{
  "data": {
    "curPage": 1,
    "datas": [
      {
        "adminAdd": false,
        "apkLink": "",
        "audit": 1,
        "author": "qianyue0317",
        "canEdit": false,
        "chapterId": 294,
        "chapterName": "完整项目",
        "collect": false,
        "courseId": 13,
        "desc": "玩Android flutter版本",
        "descMd": "",
        "envelopePic": "https://www.wanandroid.com/blogimgs/89868c9a-e793-46f3-a239-751246951b7f.png",
        "fresh": false,
        "host": "",
        "id": 27961,
        "isAdminAdd": false,
        "link": "https://www.wanandroid.com/blog/show/3618",
        "niceDate": "2024-01-29 22:10",
        "niceShareDate": "2024-01-29 22:10",
        "origin": "",
        "prefix": "",
        "projectLink": "https://github.com/qianyue0317/wan_android_flutter",
        "publishTime": 1706537457000,
        "realSuperChapterId": 293,
        "selfVisible": 0,
        "shareDate": 1706537457000,
        "shareUser": "",
        "superChapterId": 294,
        "superChapterName": "开源项目主Tab",
        "tags": [
          {
            "name": "项目",
            "url": "/project/list/1?cid=294"
          }
        ],
        "title": "玩Android-flutter项目",
        "type": 0,
        "userId": -1,
        "visible": 1,
        "zan": 0
      }
    ],
    "offset": 0,
    "over": false,
    "pageCount": 20,
    "size": 15,
    "total": 289
  },
  "errorCode": 0,
  "errorMsg": ""
}

0:在应用模块的 build.gradle 文件中,确保启用了数据绑定:

android {
    //...
    buildFeatures {
        dataBinding = true
    }
}

1. 依赖项配置

在项目的 build.gradle 文件中添加以下依赖项:

plugins {
    alias(libs.plugins.android.application)
    alias(libs.plugins.kotlin.android)
}

android {
    namespace = "com.example.mykotlin"
    compileSdk = 34

    defaultConfig {
        applicationId = "com.example.mykotlin"
        minSdk = 33
        targetSdk = 34
        versionCode = 1
        versionName = "1.0"

        testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
    }

    buildTypes {
        release {
            isMinifyEnabled = false
            proguardFiles(
                getDefaultProguardFile("proguard-android-optimize.txt"),
                "proguard-rules.pro"
Android官方提供了多个包含 DataBindingLiveDataViewModel 和 Repository 的 MVVM 架构示例项目,可在 Android 开发者官方 GitHub 仓库中找到,以下是获取示例代码的途径: ### 1. Android Architecture Components Samples 该仓库包含了多个使用 Android Jetpack 组件(如 DataBindingLiveDataViewModel 等)实现 MVVM 架构的示例项目。 - 仓库地址:[https://github.com/android/architecture-components-samples](https://github.com/android/architecture-components-samples) - 其中,“BasicSample” 项目是一个基础的 MVVM 架构示例,展示了如何使用 DataBindingLiveDataViewModelRoom(作为 Repository 的数据来源)来构建一个简单的应用。 ### 2. Android-Kotlin-Quickstart 这个仓库提供了使用 Kotlin 编写的 Android 快速入门示例,包含了 MVVM 架构的实现。 - 仓库地址:[https://github.com/android/Android-Kotlin-Quickstart](https://github.com/android/Android-Kotlin-Quickstart) - “Sunflower” 项目是一个较为完整的示例,使用DataBindingLiveDataViewModel 和 Repository 来构建一个园艺应用。 以下是一个简单的 MVVM 架构示例代码,展示了如何使用这些组件: #### 1. 定义数据模型(Model) ```kotlin data class User(val id: Int, val name: String) ``` #### 2. 定义 Repository ```kotlin class UserRepository { suspend fun getUser(): User { // 模拟网络请求或数据库查询 return User(1, "John Doe") } } ``` #### 3. 定义 ViewModel ```kotlin import androidx.lifecycle.LiveData import androidx.lifecycle.MutableLiveData import androidx.lifecycle.ViewModel import androidx.lifecycle.viewModelScope import kotlinx.coroutines.launch class UserViewModel : ViewModel() { private val userRepository = UserRepository() private val _user = MutableLiveData<User>() val user: LiveData<User> = _user init { fetchUser() } private fun fetchUser() { viewModelScope.launch { val user = userRepository.getUser() _user.value = user } } } ``` #### 4. 定义 Activity(View) ```kotlin import androidx.appcompat.app.AppCompatActivity import android.os.Bundle import androidx.activity.viewModels import androidx.databinding.DataBindingUtil import com.example.mvvmexample.databinding.ActivityMainBinding class MainActivity : AppCompatActivity() { private lateinit var binding: ActivityMainBinding private val userViewModel: UserViewModel by viewModels() override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) binding = DataBindingUtil.setContentView(this, R.layout.activity_main) binding.lifecycleOwner = this binding.viewModel = userViewModel } } ``` #### 5. 布局文件(使用 DataBinding) ```xml <layout xmlns:android="http://schemas.android.com/apk/res/android"> <data> <variable name="viewModel" type="com.example.mvvmexample.UserViewModel" /> </data> <LinearLayout android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" android:padding="16dp"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@{viewModel.user.name}" /> </LinearLayout> </layout> ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值