安卓基础(AndroidViewModel)

Posted doublebest1

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了安卓基础(AndroidViewModel)相关的知识,希望对你有一定的参考价值。

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

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

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

// Top-level build file where you can add configuration options common to all sub-projects/modules.

buildscript {
    repositories {
        maven { url \'http://maven.aliyun.com/nexus/content/groups/public/\' }
        maven { url \'http://maven.aliyun.com/nexus/content/repositories/jcenter\' }
        google()
        //jcenter()

    }
    dependencies {
        classpath \'com.android.tools.build:gradle:3.5.3\'

        // NOTE: Do not place your application dependencies here; they belong
        // in the individual module build.gradle files
    }
}

allprojects {
    repositories {
        maven { url \'http://maven.aliyun.com/nexus/content/groups/public/\' }
        maven { url \'http://maven.aliyun.com/nexus/content/repositories/jcenter\' }
        google()
        //jcenter()

    }
}

task clean(type: Delete) {
    delete rootProject.buildDir
}

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

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

MainActivity:

package com.example.androidviewmodel;

import android.arch.lifecycle.ViewModelProviders;
import android.databinding.DataBindingUtil;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;

import androidx.lifecycle.SavedStateVMFactory;

import com.example.androidviewmodel.databinding.ActivityMainBinding;

public class MainActivity extends AppCompatActivity {
MyViewModel myViewModel;
ActivityMainBinding binding;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        binding = DataBindingUtil.setContentView(this, R.layout.activity_main);
        myViewModel = ViewModelProviders.of(this, new SavedStateVMFactory(this)).get(MyViewModel.class);
        binding.setLifecycleOwner(this);
       binding.setData(myViewModel);
    }
}

MyViewModel:

package com.example.androidviewmodel;

import android.app.Application;
import android.arch.lifecycle.AndroidViewModel;
import android.content.Context;
import android.content.SharedPreferences;
import android.support.annotation.NonNull;

import androidx.lifecycle.LiveData;
import androidx.lifecycle.SavedStateHandle;

public class MyViewModel extends AndroidViewModel {
    SavedStateHandle handle;
    String key = getApplication().getResources().getString(R.string.key);
    String mydata = getApplication().getResources().getString(R.string.MY_DATA);

    public MyViewModel(@NonNull Application application, SavedStateHandle handle) {
        super(application);
        this.handle = handle;
        if (!handle.contains(key)) {
            load();
        }
    }

    public LiveData<Integer> getnumber() {
        return handle.getLiveData(key);
    }

    void load() {
        SharedPreferences shp = getApplication().getSharedPreferences(mydata, Context.MODE_PRIVATE);
        int x = shp.getInt(key, 0);
        handle.set(key, x);
    }

    void save() {
        SharedPreferences shp = getApplication().getSharedPreferences(mydata, Context.MODE_PRIVATE);
        SharedPreferences.Editor editor = shp.edit();
        editor.putInt(key, getnumber().getValue());
        editor.apply();
    }

    public void add(int x) {
        handle.set(key, getnumber().getValue() + x);
    }
}

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

Build显示:

 

 Run显示:

 

 

 

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

 

以上是关于安卓基础(AndroidViewModel)的主要内容,如果未能解决你的问题,请参考以下文章

Cannot create an instance of class AndroidViewModel (androidx ViewModelProvider AndroidViewModel)

Cannot create an instance of class AndroidViewModel (androidx ViewModelProvider AndroidViewModel)

Android 逆向Frida 框架 ( 安装 frida 12.7.5 | 安装 frida-tools 5.1.0 | PC 端 frida 与 安卓模拟器端 frida-server )(代码片

2.24 AndroidViewModel 让ViewModel 访问全局资源

无法创建 AndroidViewModel 子类的实例

如何为 AndroidViewModel 创建视图模型工厂?