[英]Android Studio, AndroidX, “Cannot resolve method..” on ViewModelProviders.of(this)
As I can see this is pretty common misunderstanding. 如我所见,这是很常见的误解。 I am currently following one online guide, so I can get into the things in android studio.
我目前正在关注一个在线指南,因此可以深入研究android studio中的内容。 So the problem is that on
cotactViewModel = ViewModel.Providers.of(this).get(ContactViewModel.class);
所以问题是在
cotactViewModel = ViewModel.Providers.of(this).get(ContactViewModel.class);
, on this
it notes Cannot resolve method of(this)
. ,在
this
指出Cannot resolve method of(this)
。 I browse the web, if the activity is a Fragment/ViewModel activity, it actually works, but the guy on the guide does it using Empty Activity
. 我浏览了网络,如果该活动是Fragment / ViewModel活动,则它实际上可以工作,但是指南中的人使用
Empty Activity
完成它。
Thanks! 谢谢!
AndroidManifest.xml AndroidManifest.xml中
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.courseproject_pmiu">
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".MainActivity" />
</application>
</manifest>
MainActivity.java MainActivity.java
package com.example.courseproject_pmiu;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import androidx.lifecycle.ViewModelProviders;
public class MainActivity extends AppCompatActivity {
private ContactViewModel contactViewModel;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
contactViewModel = ViewModelProviders.of(this).get(ContactViewModel.class);
}
}
build.gradle(Module:app) 的build.gradle(模块:APP)
apply plugin: 'com.android.application'
android {
compileSdkVersion 28
defaultConfig {
applicationId "com.example.courseproject_pmiu"
minSdkVersion 23
targetSdkVersion 28
versionCode 1
versionName "1.0"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
}
}
dependencies {
def lifecycle_version = "2.0.0-rc01"
def room_version = "2.0.0-rc01"
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation 'com.android.support:appcompat-v7:28.0.0'
implementation 'com.android.support:cardview-v7:28.0.0'
implementation 'com.android.support:design:28.0.0'
implementation 'com.android.support.constraint:constraint-layout:1.1.3'
implementation 'android.arch.lifecycle:extensions:1.1.1'
testImplementation 'junit:junit:4.12'
androidTestImplementation 'com.android.support.test:runner:1.0.2'
androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
implementation "androidx.lifecycle:lifecycle-extensions:$lifecycle_version"
annotationProcessor "android.arch.lifecycle:compiler:$lifecycle_version"
implementation "androidx.room:room-runtime:$room_version"
annotationProcessor "androidx.room:room-compiler:$room_version"
}
The problem is that you're using androidX lifecycle libraries but you're not migrate to androidX. 问题是您使用的是androidX生命周期库,但没有迁移到androidX。
If you want to migrate to androidX then remove support libs and use AndroidX libs. 如果您想迁移到androidX,请删除支持库并使用AndroidX库。
To solve this import androidX instead of support. 要解决此导入androidX而不是支持。
Use: 采用:
import androidx.appcompat.app.AppCompatActivity;
instead of: 代替:
import android.support.v7.app.AppCompatActivity;
For this you have to remove all support libraries from your build.gradle app level and add androidX appCompact. 为此,您必须从build.gradle应用程序级别中删除所有支持库,并添加androidX appCompact。
After modify your build.gradle look like this. 修改后的build.gradle如下所示。
dependencies {
def lifecycle_version = "2.0.0-rc01"
def room_version = "2.0.0-rc01"
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation 'androidx.appcompat:appcompat:1.0.2'
implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
testImplementation 'junit:junit:4.12'
androidTestImplementation 'androidx.test.ext:junit:1.1.0'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.1.1'
implementation "androidx.lifecycle:lifecycle-extensions:$lifecycle_version"
annotationProcessor "androidx.lifecycle:compiler:$lifecycle_version"
implementation "androidx.room:room-runtime:$room_version"
annotationProcessor "androidx.room:room-compiler:$room_version"
}
Important: 重要:
And at last check your gradle.properties these below properties are there if not add them: 最后检查您的gradle.properties这些以下属性是否存在(如果未添加):
android.useAndroidX=true
android.enableJetifier=true
Else 其他
Not recomended 不推荐
If you prefer to use support libraries then import these pre-androidX libs for lifecycle. 如果您更喜欢使用支持库,请在生命周期内导入这些androidX之前的库 。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.