从helper类启动新Activity

时间:2018-01-21 06:07:00

标签: android-activity start-activity startactivityforresult

我有一个名为PhotoManager的课程,负责获取适当的权限,访问相机或图库并返回Bitmap。这个类从需要更新用户个人资料图片等的其他类中调用,如此

public void onClick(DialogInterface dialog, int which) {
                    //user wants to take a picture
                    profilePic.setImageBitmap(photoManager.userWantsToTakePicture());
                }

我在PhotoManager中调用startActivityForResult()但它不起作用。这是我的功能

public Bitmap userWantsToUploadPicture(){

    int permissionChecker = ContextCompat.checkSelfPermission(context, android.Manifest.permission.READ_EXTERNAL_STORAGE);
    if(permissionChecker == PackageManager.PERMISSION_GRANTED){

        //THIS NEXT LINE DOES NOT WORK
        startActivityForResult(new Intent(Intent.ACTION_PICK, android.provider.MediaStore.Images.Media.INTERNAL_CONTENT_URI), SELECT_FILE);
        return selectedImage;
    }
    else{
        --do stuff
    }
}

我一直收到此错误

java.lang.NullPointerException: Attempt to invoke virtual method 
'android.app.ActivityThread$ApplicationThread 
android.app.ActivityThread.getApplicationThread()' on a null object 
reference

并且我不确定为什么我的意图因为我已经初始化而无效。

另外,我在更新用户个人资料图片的类中运行了此代码,并且运行正常。当我从PhotoManager类运行代码

时,这只是一个问题

PhotoManager()有一个构造函数

public PhotoManager(Context c, Activity a){
    context = c;
    activity = a;
}

1 个答案:

答案 0 :(得分:0)

我不知道你的问题的确切答案,但你有一些可能是原因的问题,修复这些问题可能会帮助你找到解决方案:

首先,我建议不要将ContextActivity作为参数传递给类。如果您需要,请在需要时将其传递给调用方法,并使用您可用的最本地Context

public Bitmap userWantsToUploadPicture(Context context) {
    // Do stuff
}

如果您坚持使用这些引用,则会泄漏内存,并且可能正在使用原本无效的对象(例如Activity已调用finish()

其次,Activity Context,所以拥有一个两者都是多余的构造函数。

第三,你的方法应该返回一个Bitmap,但它开始另一个Activity来挑选照片,所以你无法让Bitmap返回。