有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

Singleton类中的java实例化对象具有空引用

在Galaxy A6上,我得到了这个堆栈跟踪:

Caused by java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String com.xtremecolor.mycoloring.persistance.VectorEntity.getModel()' on a null object reference
       at com.xtremecolor.mycoloring.models.VectorModelContainer.<init>(VectorModelContainer.java:29)
       at com.xtremecolor.mycoloring.mvvm.viewmodels.ColoringViewModel.<init>(ColoringViewModel.java:32)
       at java.lang.reflect.Constructor.newInstance0(Constructor.java)
       at java.lang.reflect.Constructor.newInstance(Constructor.java:343)
       at 安卓x.lifecycle.ViewModelProvider$AndroidViewModelFactory.create(ViewModelProvider.java:267)
       at 安卓x.lifecycle.SavedStateViewModelFactory.create(SavedStateViewModelFactory.java:112)
       at 安卓x.lifecycle.ViewModelProvider.get(ViewModelProvider.java:185)
       at 安卓x.lifecycle.ViewModelProvider.get(ViewModelProvider.java:150)
       at com.xtremecolor.mycoloring.ColoringActivity.onCreate(ColoringActivity.java:105)
       at 安卓.app.Activity.performCreate(Activity.java:7955)
       at 安卓.app.Activity.performCreate(Activity.java:7944)
       at 安卓.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1307)
       at 安卓.app.ActivityThread.performLaunchActivity(ActivityThread.java:3531)
       at 安卓.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3703)
       at 安卓.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:83)
       at 安卓.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135)
       at 安卓.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95)
       at 安卓.app.ActivityThread$H.handleMessage(ActivityThread.java:2216)
       at 安卓.os.Handler.dispatchMessage(Handler.java:107)
       at 安卓.os.Looper.loop(Looper.java:237)
       at 安卓.app.ActivityThread.main(ActivityThread.java:7948)
       at java.lang.reflect.Method.invoke(Method.java)
       at com.安卓.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
       at com.安卓.internal.os.ZygoteInit.main(ZygoteInit.java:1075)

因此,我尝试使用单例类“ModelsProvider”将对象从一个活动传递到另一个活动,如下所示:

@Override
public void startActivity(VectorEntity selectedVectorEntity) {

    libraryViewModel.setCurrentVectorModel(selectedVectorEntity);
    Intent coloringIntent = new Intent(getActivity(), ColoringActivity.class);
    startActivity(coloringIntent);

}

在LibraryViewModel中:

public void setCurrentVectorModel(VectorEntity selectedVectorEntity){

    modelsProvider.setSelectedVectorModel(selectedVectorEntity);
}

在ModelsProvider中:

public VectorEntity getSelectedVectorModel() {
    return selectedVectorEntity;
}

public void setSelectedVectorModel(VectorEntity selectedVectorModel) {
    selectedVectorEntity = selectedVectorModel;
}

在ColoringActivity的viewmodel ColoringViewModel构造函数(第32行)中:

VectorModelContainer vectorModelContainer = new VectorModelContainer(modelsProvider.getSelectedVectorModel());

最后在VectorModelContainter中:

public VectorModelContainer(VectorEntity vectorEntity) {
    super(vectorEntity.getModel());
    this.vectorEntity = vectorEntity;
    init();
}

就在这里,矢量实体。getModel()(第29行)正在尝试对空对象引用调用虚方法。我也在其他设备上尝试过,像素2XL、S9和S10,但这些设备上并没有出现这个问题

编辑:

这是来自另一个设备(像素4XL)的堆栈跟踪,该设备本身不存在此问题:

<init>:29, VectorModelContainer (com.xtremecolor.mycoloring.models)
<init>:32, ColoringViewModel (com.xtremecolor.mycoloring.mvvm.viewmodels)
newInstance0:-1, Constructor (java.lang.reflect)
newInstance:343, Constructor (java.lang.reflect)
create:267, ViewModelProvider$AndroidViewModelFactory (安卓x.lifecycle)
create:112, SavedStateViewModelFactory (安卓x.lifecycle)
get:185, ViewModelProvider (安卓x.lifecycle)
get:150, ViewModelProvider (安卓x.lifecycle)
onCreate:115, ColoringActivity (com.xtremecolor.mycoloring)
performCreate:8000, Activity (安卓.app)
performCreate:7984, Activity (安卓.app)
callActivityOnCreate:1309, Instrumentation (安卓.app)
performLaunchActivity:3422, ActivityThread (安卓.app)
handleLaunchActivity:3601, ActivityThread (安卓.app)
execute:85, LaunchActivityItem (安卓.app.servertransaction)
executeCallbacks:135, TransactionExecutor (安卓.app.servertransaction)
execute:95, TransactionExecutor (安卓.app.servertransaction)
handleMessage:2066, ActivityThread$H (安卓.app)
dispatchMessage:106, Handler (安卓.os)
loop:223, Looper (安卓.os)
main:7656, ActivityThread (安卓.app)
invoke:-1, Method (java.lang.reflect)
run:592, RuntimeInit$MethodAndArgsCaller (com.安卓.internal.os)
main:947, ZygoteInit (com.安卓.internal.os)

共 (1) 个答案