【问题标题】:Application Context cannot cast to Activity Context应用程序上下文无法转换为活动上下文
【发布时间】:2023-02-08 18:19:08
【问题描述】:

这是功能:

public boolean checkPermissionREAD_EXTERNAL_STORAGE(
            final Context context) {
        int currentAPIVersion = Build.VERSION.SDK_INT;
        if (currentAPIVersion >= android.os.Build.VERSION_CODES.M) {
            if (ContextCompat.checkSelfPermission(context, Manifest.permission.READ_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {
                if (ActivityCompat.shouldShowRequestPermissionRationale(
                        (Activity) context,
                        Manifest.permission.READ_EXTERNAL_STORAGE)) {
                    Toast.makeText(this, "test", Toast.LENGTH_LONG).show();

                } else {
                    ActivityCompat
                            .requestPermissions(
                                    (Activity) context,
                                    new String[]{Manifest.permission.READ_EXTERNAL_STORAGE},
                                    MY_PERMISSIONS_REQUEST_READ_EXTERNAL_STORAGE);
                }
                return false;
            } else {
                return true;
            }

        } else {
            return true;
        }
    }

这是我得到的错误:

E/AndroidRuntime: FATAL EXCEPTION: main
    Process: MyApp.App, PID: 10585
    java.lang.ClassCastException: MyApp.App cannot be cast to android.app.Activity
        at MyApp.utility.FileUpload.GenericFileUploader.checkPermissionREAD_EXTERNAL_STORAGE(GenericFileUploader.java:209)

需要未强制转换为 Activity 的函数来检查和/或授予文件访问权限。非常感谢(并且需要)一些见解。

【问题讨论】:

  • 您已经将上下文作为参数传递,为什么要将它投射到函数中。尝试删除你的演员表
  • @MokhtarAbdelhalim:requestPermissions() 需要一个Activity 而不仅仅是任何旧的上下文。
  • @MokhtarAbdelhalim,我实际上已经尝试过了,但是ActivityCompat 要求进一步Activity。因此,即使参数中有上下文,正文中也需要它。 @JoachimSauer,有什么办法可以解决?

标签: java android android-activity mobile-application


【解决方案1】:

问题很明显: cast (Activity) context 抛出异常,因为 context 不代表 Activity。 如果您接收的不是 Context 作为参数,而是 Activity 参数,则此异常将更加清晰。 在这种情况下,APP 很可能无法通过编译。

您必须了解为什么收到的上下文不是 Activity,并且,如果此功能不是您项目的基础,您可以将所有内容放在 try-catch 中并解决 APP 停止。

【讨论】:

  • 我明白你的意思,但是,这个功能是必需的。那么,你能告诉我一些其他的解决方法吗?
  • 您可以将输入参数作为 Activity intead of Context,如果编译器失败,您可以理解是否有问题。不幸的是,我认为没有其他方法:您必须了解为什么上下文不是一项活动。检查调用函数的位置并检查调用者上下文。尝试了解带来 APP 的调用在哪里失败,如果需要,请发布类代码,我会检查它。
猜你喜欢
  • 2018-05-19
  • 2012-07-19
  • 2011-11-10
  • 1970-01-01
  • 1970-01-01
  • 2012-03-03
  • 1970-01-01
  • 1970-01-01
  • 2015-11-05
相关资源
最近更新 更多