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. So the problem is that on cotactViewModel = ViewModel.Providers.of(this).get(ContactViewModel.class);
, on this
it notes 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
.
Thanks!
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
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)
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.
If you want to migrate to androidX then remove support libs and use AndroidX libs.
To solve this import androidX instead of support.
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.
After modify your build.gradle look like this.
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:
android.useAndroidX=true
android.enableJetifier=true
Else
Not recomended
If you prefer to use support libraries then import these pre-androidX libs for lifecycle.