简体   繁体   English

Android Studio,AndroidX,ViewModelProviders.of(this)上的“无法解析方法。”

[英]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.

相关问题 ViewModelProviders.of(getActivity()) “无法解析(android.app.Activity)的方法” - ViewModelProviders.of(getActivity()) “Cannot resolve method of(android.app.Activity)” 无法在ViewModelProviders中解析android.support.v4.app.FragmentActivity的方法 - Cannot resolve method of android.support.v4.app.FragmentActivity in ViewModelProviders Android Studio 无法解析 androidx 符号 - Android Studio cannot resolve androidx symbols 错误:找不到方法ViewModelProviders.of(Fragment,Factory)的合适方法 - error: no suitable method found for method ViewModelProviders.of(Fragment,Factory) 直接实例化ViewModels,而不使用ViewModelProviders.of方法 - Instantiate ViewModels directly, without making use of ViewModelProviders.of method 无法解析符号 ViewModelProviders - Cannot resolve symbol ViewModelProviders 当我尝试实例化ViewModelProviders时,无法解析of()方法 - cannot resolve method of() , when i try to instantiate ViewModelProviders android studio无法解析方法 - android studio cannot resolve method 无法解析 AppCompatActivity 上的符号 ViewModelProviders - Cannot resolve symbol ViewModelProviders on AppCompatActivity 无法解析@ androidx.annotation.NonNull,无法解析方法匿名android.hardware.camera2 - Cannot resolve @androidx.annotation.NonNull , Cannot resolve method anonymous android.hardware.camera2
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM