我有一个名为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;
}
答案 0 :(得分:0)
我不知道你的问题的确切答案,但你有一些可能是原因的问题,修复这些问题可能会帮助你找到解决方案:
首先,我建议不要将Context
和Activity
作为参数传递给类。如果您需要,请在需要时将其传递给调用方法,并使用您可用的最本地Context
。
public Bitmap userWantsToUploadPicture(Context context) {
// Do stuff
}
如果您坚持使用这些引用,则会泄漏内存,并且可能正在使用原本无效的对象(例如Activity
已调用finish()
。
其次,Activity
是Context
,所以拥有一个两者都是多余的构造函数。
第三,你的方法应该返回一个Bitmap
,但它开始另一个Activity
来挑选照片,所以你无法让Bitmap
返回。