I am trying to change this class to work with my room query

@Query("select * from customer_contacts where serverCustomerId = :id and contactName like '%' || :name || '%'")
fun fetchCustomerContactsByName(id:Int, name:String): LiveData<List<CustomerContact>>

and my view model

class CustomerContactVM : ViewModel() {
var customers: LiveData<List<CustomerContact>> = MutableLiveData<List<CustomerContact>>()

fun getCustomerContacts(id: Int, name: String) {
    customers = CustomerContactDao().fetchCustomerContactsByName(id, name)
}
}

I dont understand how to create the viewmodel in the dialog fragment as I keep getting cannot resolve errors trying ViewModelProviders.of(this).get(CustomerContactVM.class)

public class CustomerContactListFragment extends DialogFragment {

private CustomerContactVM customerContactVM;

@Override
public void onStart() {
    super.onStart();
    //setEmptyText("No Items");
}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    // Inflate the layout for this fragment
    if (savedInstanceState != null) { mCustomer = savedInstanceState.getString(ARG_CUSTOMER);
        if (savedInstanceState.getString(ARG_QUERY) != null) {
            mQuery = savedInstanceState.getString(ARG_QUERY);
        }
    }

    GlobalState globalState = (GlobalState) getActivity().getApplication();
   // mState.addScreenLog("CustomerContactListFragment");

    return inflater.inflate(R.layout.fragment_catalogue_items, container, false);
}
}

@Override
public void onSaveInstanceState(Bundle outState) {
    super.onSaveInstanceState(outState);
}


@Override
public void onAttach(Activity activity) {
    super.onAttach(activity);
}

@Override
public void onDetach() {
    dbHelper.close();
    super.onDetach();
}


}

Solution 1:

ViewModelProviders.of (this) is deprecated. So you should use the latest version of lifecycle components.

     implementation "androidx.lifecycle:lifecycle-extensions:2.2.0-rc03"

     //for kotlin
     implementation "group: 'androidx.lifecycle', name:'lifecycle-viewmodel-ktx', version:2.2.0-rc03"
     kapt "androidx.lifecycle:lifecycle-compiler:2.2.0-rc03"

ViewModel initizalition (Java):

private CustomerContactVM customerContactVM;

@Override
protected void onCreate(Bundle savedInstanceState) {
   super.onCreate(savedInstanceState);

   customerContactVM = ViewModelProvider(this).get(CustomerContactVM.class);
   // Other setup code below...
}

ViewModel initizalition (Kotlin):

var customerContactVM:CustomerContactVM? = null

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)

    customerContactVM = ViewModelProvider(this).get(CustomerContactVM::class.java)
    // Other setup code below...
    }