今天学习了AndroidViewModel,但是我根据视频上讲解,根据所讲用例,在添加依赖得时候一直报错,后来我请教大佬,他告诉我说是,因为网络得问题,国外得一些依赖有可能下不下来,所以可以下载阿里云的依赖。

  1. implementation 'androidx.lifecycle:lifecycle-viewmodel-savedstate:1.0.0-alpha01'

需将build.gradle(Project)更改为以下:

  1. // Top-level build file where you can add configuration options common to all sub-projects/modules.
  2.  
  3. buildscript {
  4. repositories {
  5. maven { url 'http://maven.aliyun.com/nexus/content/groups/public/' }
  6. maven { url 'http://maven.aliyun.com/nexus/content/repositories/jcenter' }
  7. google()
  8. //jcenter()
  9.  
  10. }
  11. dependencies {
  12. classpath 'com.android.tools.build:gradle:3.5.3'
  13.  
  14. // NOTE: Do not place your application dependencies here; they belong
  15. // in the individual module build.gradle files
  16. }
  17. }
  18.  
  19. allprojects {
  20. repositories {
  21. maven { url 'http://maven.aliyun.com/nexus/content/groups/public/' }
  22. maven { url 'http://maven.aliyun.com/nexus/content/repositories/jcenter' }
  23. google()
  24. //jcenter()
  25.  
  26. }
  27. }
  28.  
  29. task clean(type: Delete) {
  30. delete rootProject.buildDir
  31. }

跟着视频所作的项目是永久保存数据,在正常重启情况下,也可以保存数据。

项目还是一个简单的加减运算,两个按钮,一个Textview。

MainActivity:

  1. package com.example.androidviewmodel;
  2.  
  3. import android.arch.lifecycle.ViewModelProviders;
  4. import android.databinding.DataBindingUtil;
  5. import android.os.Bundle;
  6. import android.support.v7.app.AppCompatActivity;
  7.  
  8. import androidx.lifecycle.SavedStateVMFactory;
  9.  
  10. import com.example.androidviewmodel.databinding.ActivityMainBinding;
  11.  
  12. public class MainActivity extends AppCompatActivity {
  13. MyViewModel myViewModel;
  14. ActivityMainBinding binding;
  15.  
  16. @Override
  17. protected void onCreate(Bundle savedInstanceState) {
  18. super.onCreate(savedInstanceState);
  19. setContentView(R.layout.activity_main);
  20. binding = DataBindingUtil.setContentView(this, R.layout.activity_main);
  21. myViewModel = ViewModelProviders.of(this, new SavedStateVMFactory(this)).get(MyViewModel.class);
  22. binding.setLifecycleOwner(this);
  23. binding.setData(myViewModel);
  24. }
  25. }

MyViewModel:

  1. package com.example.androidviewmodel;
  2.  
  3. import android.app.Application;
  4. import android.arch.lifecycle.AndroidViewModel;
  5. import android.content.Context;
  6. import android.content.SharedPreferences;
  7. import android.support.annotation.NonNull;
  8.  
  9. import androidx.lifecycle.LiveData;
  10. import androidx.lifecycle.SavedStateHandle;
  11.  
  12. public class MyViewModel extends AndroidViewModel {
  13. SavedStateHandle handle;
  14. String key = getApplication().getResources().getString(R.string.key);
  15. String mydata = getApplication().getResources().getString(R.string.MY_DATA);
  16.  
  17. public MyViewModel(@NonNull Application application, SavedStateHandle handle) {
  18. super(application);
  19. this.handle = handle;
  20. if (!handle.contains(key)) {
  21. load();
  22. }
  23. }
  24.  
  25. public LiveData<Integer> getnumber() {
  26. return handle.getLiveData(key);
  27. }
  28.  
  29. void load() {
  30. SharedPreferences shp = getApplication().getSharedPreferences(mydata, Context.MODE_PRIVATE);
  31. int x = shp.getInt(key, 0);
  32. handle.set(key, x);
  33. }
  34.  
  35. void save() {
  36. SharedPreferences shp = getApplication().getSharedPreferences(mydata, Context.MODE_PRIVATE);
  37. SharedPreferences.Editor editor = shp.edit();
  38. editor.putInt(key, getnumber().getValue());
  39. editor.apply();
  40. }
  41.  
  42. public void add(int x) {
  43. handle.set(key, getnumber().getValue() + x);
  44. }
  45. }

但是我遇到了一个问题,我跟着视频所敲的代码,就是报错,一直找不出为什么,很难受。

Build显示:

Run显示:

一直说我无法创建Myviewmodel的实例,弄了大半天,还是没结果,渴望得到大佬的指点。

安卓基础(AndroidViewModel)的更多相关文章

  1. [安卓基础] 004.运行app

    运行你的app 这篇课程会教你: 1.如何在设备上运行你的app. 2.如何在模拟器上运行你的app. 当然,在学习之前,你还需要知道: 1.如何使用设备. 2.如何使用模拟器. 3.管理你的项目. ...

  2. 安卓基础之Sqlite数据库最最基础操作

    Sqlite数据库基础操作 摘要:在应用中新建一个数据库,并创建一个数据表写入数据,然后读取表中数据并展示. 主要逻辑: 1.通过继承SQLiteOpenHelper自定义类,定制数据库的表结构,初始 ...

  3. 【安卓基础】WebView开发优化基础

    最近工作很忙,不仅要抽空进行管理,还有开发任务在身,幸好有一些规划进行指导,所以还能顺利解决问题.在管理和技术上面,我认为技术是硬实力,管理是软实力,自己需要多点时间花在技术上. 回归正题,在项目中的 ...

  4. [安卓基础] 006.打开另一个Activity

    *:first-child { margin-top: 0 !important; } body > *:last-child { margin-bottom: 0 !important; } ...

  5. [安卓基础] 003.建立你的第一个App

    创建一个android工程项目 我们使用android提供的集成开发工具(Eclipse+ADT)来创建android工程项目.用这个集成开发工具创建项目,简单,方便,快捷,且自动帮助我们生成基础的文 ...

  6. [安卓基础] 001.学习Android开发的好教程

    如果想自学android,有许多不错的android网站.这里收集了一些,列举如下: 国内 极客学院,这里有非常丰富的视频教程. http://www.jikexueyuan.com/course/a ...

  7. [安卓基础]011存储数据(中)——sqlite语法介绍

    *:first-child { margin-top: 0 !important; } body > *:last-child { margin-bottom: 0 !important; } ...

  8. [安卓基础] 007.管理Activity的生命周期

    *:first-child { margin-top: 0 !important; } body > *:last-child { margin-bottom: 0 !important; } ...

  9. 安卓基础之通过Intent跳转Activity

    通过Intent跳转Activity   一.通过意图开启Activity的方式:   隐式意图:通过指定一组数据或者动作实现 Intent intent=new Intent(); intent.s ...

随机推荐

  1. SpringBoot--application.yml

    application.properties 配置了端口号:9090 application.yml 也配置了端口号:8080 SpringBoot使用9090,以属性为主 1.在applicatio ...

  2. (原创)SpringBoot入门

    本文章是SpringBoot入门的介绍在这里   我会尽量写一些细节性的东西,我用的是IDEA2016  Tomcat7 JDK1.8 Maven3.3.9 IDEA Tomcat JDK Maven ...

  3. oracle sqlplus链接和sid

    1.链接 ( 1.sqlplus /nolog 2.conn sys/sys@172.16.17.36/orcl as sysdba ) 2.sid   数据库名称 ----如:orcl 1.监听程序 ...

  4. Java必须知道的知识点

    junit用法,before,beforeClass,after, afterClass的执行顺序 分布式锁 nginx的请求转发算法,如何配置根据权重转发 用hashmap实现redis有什么问题( ...

  5. SpringBoot集成flowable碰见DMN不能初始化

    在idea创建了SpringBoot项目,集成flowable,运行的时候DMN引擎初始化失败,花了一天时间也没解决. 抱着试试的态度重新建立一个项目,加入同样的依赖,成功运行. 但把成功运行的项目配 ...

  6. Leetcode 74. 搜索二维矩阵 C+

    二分法,先对行二分找出结果可能存在的行,再对这一行二分查找.O(Log m+Log n),m.n分别为矩阵的高和宽. class Solution { public: bool searchMatri ...

  7. vue-element-admin框架快速入门

    年底了,最近公司也不是太忙,感觉今年互联网行业都遇到寒冬,不在是前两年像热的发烫的赛道.这几天完成公司项目系统的优化和升级,目前准备想开发一套前后端分离的系统.       现在java最新最火的技术 ...

  8. MYSQL之路练习题

    题目换成求平均薪水的等级最高的部门的部门名称

  9. AcWing 873. 欧拉函数

    //用定义直接求 #include<bits/stdc++.h> using namespace std; int main() { int n; cin>>n; while( ...

  10. 关于BaiduPSC-Go的一些bug的更正

    首先说下操作步骤 下载是在GutHub,这个不赘述,网上很多资料 下载之后配置环境变量,在path的后面加上一个分号,然后加上你下载的目录,目录名最好为英文 然后通过命令行CMD工具,输入BaiduP ...