Android 启动应用程序时出现NullPointerException

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

我很想开始我的活动(在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);
    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();