我想在另一个Activity中使用我的方法onImageFromCameraClick
,但是当我尝试从我的其他Activity中使用它时,它会导致以下错误:
java.lang.NullPointerException:尝试在空对象引用上调用虚方法'android.content.pm.PackageManager android.content.Context.getPackageManager()'
如何在另一个Activity中使用该方法?
方法onImageFromCameraClick()
:
public void onImageFromCameraClick() {
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
if (intent.resolveActivity(getPackageManager()) != null) {
File photoFile = null;
try { photoFile = createImageFile();
} catch (IOException e) {
Toast.makeText(this, e.getMessage(), Toast.LENGTH_LONG);
}
if (photoFile != null) {
Uri photoUri = FileProvider.getUriForFile(this,
getApplicationContext().getPackageName() + ".fileprovider", photoFile);
intent.putExtra(MediaStore.EXTRA_OUTPUT, photoUri);
startActivityForResult(intent, REQUEST_IMAGE_CAPTURE);
} // inner if end
} // outer if end
} // onImageFromCameraClick END
OtherActivity:
case "cameraStart":
Handler mHandler = new Handler(Looper.getMainLooper());
mHandler.postDelayed(new Runnable() {
@Override
public void run() {
FaceDetectionActivity fm = new FaceDetectionActivity();
fm.onImageFromCameraClick();
} }, 0);
break; }
break;
// Code end
如果我正确理解你的问题,你可以尝试使用包含Context
的主类的onImageFromCameraClick()
来初始化对其他Activity
中主类的引用,例如:
MainActivity main = (MainActivity) context;
main.onImageFromCameraClick();
你可以通过将context
的一个实例传递给你的其他活动来从你的主类获得this
。
我这是因为你的FaceDetectionActivity是由new创建的。我得到了这个:
public void onImageFromCameraClick() {
...
getApplicationContext().getPackageManager()
...
}
以下是不可能的。
FaceDetectionActivity fm = new FaceDetectionActivity();
fm.onImageFromCameraClick();
在给出解决方案之前,我建议你先阅读Android。
现在的解决方案是将onImageFromCameraClick()
移动到实用程序类,并将Context作为onImageFromCameraClick(Context context){}
传递给它。使用此上下文而不是getApplicationContext()