如何获取 class 的上下文

How to get context of class

我有以下 class 并且我尝试获取上下文以便将意图发送给另一个 activity。

 public class CloudDocumentTextRecognitionProcessor
            extends VisionProcessorBase<FirebaseVisionCloudText> {

        public Context mContext;

        private FirebaseVisionCloudDocumentTextDetector detector;

public CloudDocumentTextRecognitionProcessor() {
            super();
            detector = FirebaseVision.getInstance().getVisionCloudDocumentTextDetector();
        }

        public CloudDocumentTextRecognitionProcessor(Context context) {

            this.mContext = context;

        }

        @Override
        protected Task<FirebaseVisionCloudText> detectInImage(FirebaseVisionImage image) {

            return detector.detectInImage(image);
        }


        @Override
        protected void onSuccess(
                @NonNull FirebaseVisionCloudText text,
                @NonNull FrameMetadata frameMetadata,
                @NonNull GraphicOverlay graphicOverlay) {

            graphicOverlay.clear();

            Intent i = new Intent(mContext, ResultActivity.class).setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
            i.putExtra("key", text.getText());
            mContext.startActivity(i);


        }


    }

但是我在设置意图的行中遇到错误:

"Attempt to invoke virtual method 'java.lang.String android.content.Context.getPackageName()' on a null object reference"

我也试过 MyApplication.getContext() 而不是 mContext,但没有结果。

有什么想法吗?

此 class 不继承任何具有上下文的 Android 组件,因此您必须自己注入它。您必须使用将 Context 作为参数的构造函数实例化 class,并将其从 Activity 或其他具有 context/access 的 Android 组件传递给应用上下文。

类似于(伪代码):

Class MyActivity
{
    ...
    imageProcessor = new CloudDocumentTextRecognitionProcessor(this);
    // or imageProcessor = new CloudDocumentTextRecognitionProcessor(this.getApplicationContext());
}

如何选择语境?

  • 如果 CloudDocumentTextRecognitionProcessor 实例应该在应用程序的整个生命周期中存在,请使用 getApplicationContext();
  • 如果保证 CloudDocumentTextRecognitionProcessor 实例仅在 Activity 的生命周期内存在,请使用 this.

您已经为 mContext 字段创建了一个 setter,您可以对传递上下文的 class 使用辅助构造函数。 从您的 activity 中初始化 class 对象,如下所示:

CloudDocumentTextRecognitionProcessor imageProcessor = new CloudDocumentTextRecognitionProcessor(this);


CloudDocumentTextRecognitionProcessor imageProcessor = new CloudDocumentTextRecognitionProcessor(getApplicationContext());