Android 启动应用程序时出现NullPointerException
我很想开始我的活动(在AndroidManifest中声明),但后来我看到了错误: 这意味着错误在第107行:Android 启动应用程序时出现NullPointerException,android,nullpointerexception,Android,Nullpointerexception,我很想开始我的活动(在AndroidManifest中声明),但后来我看到了错误: 这意味着错误在第107行: private void ustawWidokMain() { setContentView(R.layout.activity_main); Button b01 = (Button)findViewById(R.id.main_pass); Button b02 = (Button)findViewById(R.id.main_wipes); But
private void ustawWidokMain()
{
setContentView(R.layout.activity_main);
Button b01 = (Button)findViewById(R.id.main_pass);
Button b02 = (Button)findViewById(R.id.main_wipes);
Button b03 = (Button)findViewById(R.id.main_camera);
Button b04 = (Button)findViewById(R.id.main_enctpyion);
Button b05 = (Button)findViewById(R.id.main_b1);
if(!pm.hasSystemFeature(PackageManager.FEATURE_CAMERA) && !pm.hasSystemFeature(PackageManager.FEATURE_CAMERA_FRONT)) // there's error
{
b03.setEnabled(false);
}
我不知道我为什么会犯那个错误。该方法的调用方式如下:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
/* Some code has been removed */
if(dcm.isAdminActive(c))
ustawWidokMain();
您是否在清单中声明了权限
<uses-permission android:name="android.permission.CAMERA" />
<uses-feature android:name="android.hardware.camera" />
<uses-feature android:name="android.hardware.camera.autofocus" />
什么是
pm
?你们在哪里办理手续?似乎缺少。这意味着您没有在此ustawWidokMain方法中声明或初始化对象。请重新检查或调试给您错误的行 我冒昧地猜测您正在pm
之外的onCreate()
初始化。这将在您实际拥有上下文之前尝试初始化它,它将返回null
。在调用使用它的函数之前,您需要在onCreate()内部执行此操作
PackageManager pm;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
pm = getPackageManager();
/* Some code has been removed */
if(dcm.isAdminActive(c))
ustawWidokMain();
任何需要上下文
在活动
内部的内容都需要最早在onCreate()
中初始化,因为活动及其上下文
在此之前没有初始化。初始化的位置/方式是pm
吗?在if语句之前打印pm的值。它的值是什么?在调用这个函数之前,pm
在onCreate()
中初始化了吗?你能告诉我为什么否决我的问题吗?每个问题,编程都欢迎堆栈溢出。不,pm
是PackageManager,在onCreate()中声明为pm=getPackageManager()
必须在AndroidManifest中定义targetSdk>=9。和所需权限。PackageManager pm=context.getPackageManager();尝试使用此方法并检查摄像头。getNumberOfCameras()它提供设备中摄像头的数量pm
是PackageManager,并在onCreate()中声明为pm=getPackageManager()
权限如何?我没有减速。现在我将使用该权限进行测试,但活动继承了上下文。我为什么要这样写?对不起,我把它删掉了!这是相同的,他说:pm是PackageManager,在onCreate()中声明为pm=getPackageManager()
,所以我认为这不是problem@StefanoMunarini我错过了OP在onCreate()
中初始化它的地方,但是答案被接受了,所以可能不是在调用使用它的方法之前。错误的答案被接受了,因为他没有声明权限,并且告诉了我上面的内容@StefanoMunarini如果这是权限问题,那么它应该抛出一个错误,说明有关权限的内容,而不是NPE
他在发布此问题之前没有声明权限!
PackageManager pm;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
pm = getPackageManager();
/* Some code has been removed */
if(dcm.isAdminActive(c))
ustawWidokMain();