1

我有以下课程,我尝试获取上下文以便将意图发送到另一个活动。

 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);


        }


    }

但是我在设置意图的行中出现错误:

“尝试在空对象引用上调用虚拟方法'java.lang.String android.content.Context.getPackageName()'”

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

有任何想法吗?

4

2 回答 2

2

该类不继承任何具有 Context 的 Android 组件,因此您必须自己注入它。您必须使用以 Context 作为参数的构造函数来实例化该类,并将其从 Activity 或其他具有应用程序上下文的上下文/访问权限的 Android 组件传入。

类似(伪代码):

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

如何选择上下文?

  • 如果该CloudDocumentTextRecognitionProcessor实例应该在您的应用程序的整个生命周期中都存在,请使用getApplicationContext();
  • 如果CloudDocumentTextRecognitionProcessor保证实例仅在 Activity 的生命周期内存在,请使用this.
于 2018-08-22T13:38:58.957 回答
1

您已经有了 mContext 字段的设置器,并且可以为传递上下文的类使用辅助构造函数。从您的活动中初始化类对象,如下所示:

CloudDocumentTextRecognitionProcessor imageProcessor = new CloudDocumentTextRecognitionProcessor(this);

或者

CloudDocumentTextRecognitionProcessor imageProcessor = new CloudDocumentTextRecognitionProcessor(getApplicationContext());
于 2018-08-22T13:43:49.370 回答