Java 无法在Android中实例化ViewModel

Java 无法在Android中实例化ViewModel,java,android,mvvm,android-livedata,android-viewmodel,Java,Android,Mvvm,Android Livedata,Android Viewmodel,我试图在我的应用程序中实现MVVM设计模式。我已经创建了viewmodel和repository类,但当我试图在我的MainActivity中实例化viewmodel时,它会在下面的行中实例化时在MainActivity下方显示错误红线 pdfViewModel=newviewmodelprovider(MainActivity.this.get)(pdfViewModel.class) 下面是我的代码: MainActivity.java public class MainActivity e

我试图在我的应用程序中实现MVVM设计模式。我已经创建了viewmodel和repository类,但当我试图在我的MainActivity中实例化viewmodel时,它会在下面的行中实例化时在
MainActivity
下方显示错误红线

pdfViewModel=newviewmodelprovider(MainActivity.this.get)(pdfViewModel.class)

下面是我的代码:

MainActivity.java

public class MainActivity extends AppCompatActivity {

    PdfViewModel pdfViewModel;
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    pdfViewModel = new ViewModelProvider(MainActivity.this).get(PdfViewModel.class);

 }
}
public class PdfViewModel extends AndroidViewModel {

private PdfRepository pdfRepository;

public PdfViewModel(@NonNull Application application) {
    super(application);
    pdfRepository = new PdfRepository(application);
}

public LiveData<List<Pdfs>> getAllPdfs(){
    return pdfRepository.getMutableLiveData();
}
}
public class PdfRepository {

private ArrayList<Pdfs> list = new ArrayList<>();
private MutableLiveData<List<Pdfs>> mutableLiveData = new MutableLiveData<>();
private Application application;

public PdfRepository(Application application){
    this.application = application;
}

public MutableLiveData<List<Pdfs>>  getMutableLiveData(){

    SharedPreferences preferences = application.getSharedPreferences("Credentials", Context.MODE_PRIVATE);
    String email = preferences.getString("email",null);

    Retrofit retrofit = RetrofitClient.getInstance();
    ApiService apiService = retrofit.create(ApiService.class);

    Call<List<Pdfs>> call = apiService.getFiles(email);

    call.enqueue(new Callback<List<Pdfs>>() {
        @Override
        public void onResponse(Call<List<Pdfs>> call, Response<List<Pdfs>> response) {

            if(response.body() != null){
                list = (ArrayList<Pdfs>) response.body();
                mutableLiveData.setValue(list);
            }
        }

        @Override
        public void onFailure(Call<List<Pdfs>> call, Throwable t) {

            TastyToast.makeText(application,t.getMessage(),TastyToast.LENGTH_SHORT,TastyToast.ERROR).show();
        }
    });

    return mutableLiveData;
}

}
PdfViewModel.java

public class MainActivity extends AppCompatActivity {

    PdfViewModel pdfViewModel;
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    pdfViewModel = new ViewModelProvider(MainActivity.this).get(PdfViewModel.class);

 }
}
public class PdfViewModel extends AndroidViewModel {

private PdfRepository pdfRepository;

public PdfViewModel(@NonNull Application application) {
    super(application);
    pdfRepository = new PdfRepository(application);
}

public LiveData<List<Pdfs>> getAllPdfs(){
    return pdfRepository.getMutableLiveData();
}
}
public class PdfRepository {

private ArrayList<Pdfs> list = new ArrayList<>();
private MutableLiveData<List<Pdfs>> mutableLiveData = new MutableLiveData<>();
private Application application;

public PdfRepository(Application application){
    this.application = application;
}

public MutableLiveData<List<Pdfs>>  getMutableLiveData(){

    SharedPreferences preferences = application.getSharedPreferences("Credentials", Context.MODE_PRIVATE);
    String email = preferences.getString("email",null);

    Retrofit retrofit = RetrofitClient.getInstance();
    ApiService apiService = retrofit.create(ApiService.class);

    Call<List<Pdfs>> call = apiService.getFiles(email);

    call.enqueue(new Callback<List<Pdfs>>() {
        @Override
        public void onResponse(Call<List<Pdfs>> call, Response<List<Pdfs>> response) {

            if(response.body() != null){
                list = (ArrayList<Pdfs>) response.body();
                mutableLiveData.setValue(list);
            }
        }

        @Override
        public void onFailure(Call<List<Pdfs>> call, Throwable t) {

            TastyToast.makeText(application,t.getMessage(),TastyToast.LENGTH_SHORT,TastyToast.ERROR).show();
        }
    });

    return mutableLiveData;
}

}
公共类PdfViewModel扩展了AndroidViewModel{
私人储蓄;
公共PdfViewModel(@NonNull应用程序){
超级(应用);
Pdfrespository=新的Pdfrespository(应用程序);
}
公共LiveData getAllPdfs(){
返回pdfRepository.getMutableLiveData();
}
}
pdfreposition.java

public class MainActivity extends AppCompatActivity {

    PdfViewModel pdfViewModel;
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    pdfViewModel = new ViewModelProvider(MainActivity.this).get(PdfViewModel.class);

 }
}
public class PdfViewModel extends AndroidViewModel {

private PdfRepository pdfRepository;

public PdfViewModel(@NonNull Application application) {
    super(application);
    pdfRepository = new PdfRepository(application);
}

public LiveData<List<Pdfs>> getAllPdfs(){
    return pdfRepository.getMutableLiveData();
}
}
public class PdfRepository {

private ArrayList<Pdfs> list = new ArrayList<>();
private MutableLiveData<List<Pdfs>> mutableLiveData = new MutableLiveData<>();
private Application application;

public PdfRepository(Application application){
    this.application = application;
}

public MutableLiveData<List<Pdfs>>  getMutableLiveData(){

    SharedPreferences preferences = application.getSharedPreferences("Credentials", Context.MODE_PRIVATE);
    String email = preferences.getString("email",null);

    Retrofit retrofit = RetrofitClient.getInstance();
    ApiService apiService = retrofit.create(ApiService.class);

    Call<List<Pdfs>> call = apiService.getFiles(email);

    call.enqueue(new Callback<List<Pdfs>>() {
        @Override
        public void onResponse(Call<List<Pdfs>> call, Response<List<Pdfs>> response) {

            if(response.body() != null){
                list = (ArrayList<Pdfs>) response.body();
                mutableLiveData.setValue(list);
            }
        }

        @Override
        public void onFailure(Call<List<Pdfs>> call, Throwable t) {

            TastyToast.makeText(application,t.getMessage(),TastyToast.LENGTH_SHORT,TastyToast.ERROR).show();
        }
    });

    return mutableLiveData;
}

}
公共类PDF存储{
private ArrayList list=new ArrayList();
私有MutableLiveData MutableLiveData=新的MutableLiveData();
私人申请;
公共PDF存储(应用程序){
这个应用程序=应用程序;
}
公共MutableLiveData getMutableLiveData(){
SharedReferences首选项=application.getSharedReferences(“凭证”,Context.MODE\u PRIVATE);
字符串email=preferences.getString(“email”,null);
Refundation-Refundation=RefundationClient.getInstance();
ApiService ApiService=reformation.create(ApiService.class);
Call Call=apiService.getFiles(电子邮件);
call.enqueue(新回调(){
@凌驾
公共void onResponse(调用、响应){
if(response.body()!=null){
list=(ArrayList)response.body();
mutableLiveData.setValue(列表);
}
}
@凌驾
失败时公共无效(调用调用,可丢弃的t){
makeText(应用程序,t.getMessage(),TastyToast.LENGTH\u SHORT,TastyToast.ERROR).show();
}
});
返回可变的livedata;
}
}

上述代码中需要更正什么?

您的代码正在尝试创建类
ViewModelProvider
(使用
new
关键字)的新实例,这不是实例化ViewModel的正确方法

main活动中
,而不是:

pdfViewModel = new ViewModelProvider(MainActivity.this).get(PdfViewModel.class);
尝试:


请注意,正确的类是
ViewModelProviders
(末尾有一个“s”),您需要调用
的静态方法
,而不是使用
new
创建它的新实例。如果无法导入该类,请确保已将依赖项“androidx.lifecycle:lifecycle extensions:2.2.0”添加到
app/build.gradle


为了使您的代码更加清晰,我建议您学习Kotlin KTX方法
viewModels
,如前所述。不过,您需要使用Kotlin。错误说明了什么?没有显示任何内容,只有一条红线。您可以将
main活动替换为
this
。此
仅替换为
this
。您编译了代码吗?你有编译错误吗?如果是,请提供错误。a本机您可以单击红线并观察出现的红色灯泡。然后单击灯泡寻找可能的解决方案。当更改为
时,它的语句“无法解析构造函数”
ViewModelProviders
没有显示在建议中,而是显示了
ViewModelProvider
。尝试将“androidx.lifecycle:lifecycle extensions:2.2.0”添加到模块build.gradle中。