gpt4 book ai didi

java - 在上下文中获取 NullPointerException

转载 作者:行者123 更新时间:2023-12-02 10:12:05 24 4
gpt4 key购买 nike

我想在 Android Studio 中运行该程序,但出现此错误。

java.lang.NullPointerException: Attempt to invoke virtual method 'android.content.pm.ApplicationInfo android.content.Context.getApplicationInfo()' on a null object reference
at android.content.ContextWrapper.getApplicationInfo(ContextWrapper.java:152)
at android.view.ContextThemeWrapper.getTheme(ContextThemeWrapper.java:157)
at android.app.AlertDialog.resolveDialogTheme(AlertDialog.java:224)
at android.app.AlertDialog$Builder.<init>(AlertDialog.java:454)
at com.example.drowzy.LivePreviewActivity.drowzy_alert(LivePreviewActivity.java:219)
at com.example.drowzy.LivePreviewActivity.eye_tracking(LivePreviewActivity.java:212)
at com.example.drowzy.FaceDetectionProcessor.onSuccess(FaceDetectionProcessor.java:90)
at com.example.drowzy.FaceDetectionProcessor.onSuccess(FaceDetectionProcessor.java:38)
at com.example.drowzy.VisionProcessorBase$2.onSuccess(VisionProcessorBase.java:114)
at com.google.android.gms.tasks.zzn.run(Unknown Source:4)
at android.os.Handler.handleCallback(Handler.java:789)
at android.os.Handler.dispatchMessage(Handler.java:98)
at android.os.Looper.loop(Looper.java:251)
at android.app.ActivityThread.main(ActivityThread.java:6572)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:240)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:767)

它说我的上下文为空。我已经尝试了谷歌中可能的解决方案,但它不起作用。我初始化上下文的方式是否错误?我可以在 FaceDetectionProcessor 中没有指定上下文的情况下调用另一个类中的 drowzy_alert 方法吗?

这是我的 LivePreviewActivity

public void eye_tracking(@NonNull FirebaseVisionFace face){
if (face.getRightEyeOpenProbability() < 0.1 && face.getLeftEyeOpenProbability() < 0.1) {
drowzy_alert();
}
}

public void drowzy_alert(){

// Use the Builder class for convenient dialog construction
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setMessage("Drowzy Detected")
.setPositiveButton("Yes", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
// FIRE ZE MISSILES!
}
})
.setNegativeButton("No", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
// User cancelled the dialog
}
});
// Create the AlertDialog object and return it
builder.create();
}

这是我的 FaceDetectionProcessor

protected void onSuccess(
@Nullable Bitmap originalCameraImage,
@NonNull List<FirebaseVisionFace> faces,
@NonNull FrameMetadata frameMetadata,
@NonNull GraphicOverlay graphicOverlay
) {

graphicOverlay.clear();
if (originalCameraImage != null) {
CameraImageGraphic imageGraphic = new CameraImageGraphic(graphicOverlay, originalCameraImage);
graphicOverlay.add(imageGraphic);
}
for (int i = 0; i < faces.size(); ++i) {
FirebaseVisionFace face = faces.get(i);

int cameraFacing =
frameMetadata != null ? frameMetadata.getCameraFacing() :
Camera.CameraInfo.CAMERA_FACING_BACK;
FaceGraphic faceGraphic = new FaceGraphic(graphicOverlay, face, cameraFacing);
LivePreviewActivity livePreviewActivity = new LivePreviewActivity();
graphicOverlay.add(faceGraphic);
livePreviewActivity.eye_tracking(face);
}
graphicOverlay.postInvalidate();
}

最佳答案

LivePreviewActivity livePreviewActivity = new LivePreviewActivity();

您无法以这种方式实例化 LivePreviewActivity。如果您有一个 Activity,则只能使用 startActivity 或由 android 管理的其他上下文方法。

整个想法是,每当您使用某个 Activity 时,该 Activity 都应该位于 Activity 堆栈的顶部(即对您的用户可见),而 startActivity 会为您做到这一点。它还在您的 Activity 之间传递应用程序和 Activity 上下文,应用程序需要这些上下文来了解应用程序和设备的状态。如果没有此上下文,应用程序就无法工作。

您的 Activity 需要位于堆栈顶部的原因是,一旦某个 Activity 不再位于堆栈顶部,它就可以随时被 Android 杀死以节省内存,并且您无能为力防止这种行为。您可以对被终止的 Activity 使用react,但仅此而已。

根据我收集的信息,您必须将所有这些逻辑转移到单个 Activity 中,而不是将其拆分为两个 Activity 。如果您确实想同时加载多个 Activity,请考虑使用 fragment 。

关于java - 在上下文中获取 NullPointerException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54945223/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com