2013-08-11 5 views
-1

Я устал, чтобы начать свою активность (объявленный в AndroidManifest), но потом я увидел, что ошибка (ы):NullPointerException при запуске приложения

08-11 16:04:05.952: E/AndroidRuntime(815): FATAL EXCEPTION: main 
08-11 16:04:05.952: E/AndroidRuntime(815): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.radzik.devadmin/com.radzik.devadmin.MainActivity}: java.lang.NullPointerException 
08-11 16:04:05.952: E/AndroidRuntime(815): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2059) 
08-11 16:04:05.952: E/AndroidRuntime(815): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2084) 
08-11 16:04:05.952: E/AndroidRuntime(815): at android.app.ActivityThread.access$600(ActivityThread.java:130) 
08-11 16:04:05.952: E/AndroidRuntime(815): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1195) 
08-11 16:04:05.952: E/AndroidRuntime(815): at android.os.Handler.dispatchMessage(Handler.java:99) 
08-11 16:04:05.952: E/AndroidRuntime(815): at android.os.Looper.loop(Looper.java:137) 
08-11 16:04:05.952: E/AndroidRuntime(815): at android.app.ActivityThread.main(ActivityThread.java:4745) 
08-11 16:04:05.952: E/AndroidRuntime(815): at java.lang.reflect.Method.invokeNative(Native Method) 
08-11 16:04:05.952: E/AndroidRuntime(815): at java.lang.reflect.Method.invoke(Method.java:511) 
08-11 16:04:05.952: E/AndroidRuntime(815): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786) 
08-11 16:04:05.952: E/AndroidRuntime(815): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553) 
08-11 16:04:05.952: E/AndroidRuntime(815): at dalvik.system.NativeStart.main(Native Method) 
08-11 16:04:05.952: E/AndroidRuntime(815): Caused by: java.lang.NullPointerException 
08-11 16:04:05.952: E/AndroidRuntime(815): at com.radzik.devadmin.MainActivity.ustawWidokMain(MainActivity.java:107) 
08-11 16:04:05.952: E/AndroidRuntime(815): at com.radzik.devadmin.MainActivity.onCreate(MainActivity.java:35) 
08-11 16:04:05.952: E/AndroidRuntime(815): at android.app.Activity.performCreate(Activity.java:5008) 
08-11 16:04:05.952: E/AndroidRuntime(815): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1079) 
08-11 16:04:05.952: E/AndroidRuntime(815): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2023) 
08-11 16:04:05.952: E/AndroidRuntime(815): ... 11 more 

Это означает, что ошибка находится на 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(); 
+0

Где/как инициализируется 'pm'? – codeMagic

+0

Распечатайте значение pm перед оператором if. Какова его ценность? – jarmod

+0

Вызывается 'pm' в' onCreate() 'и перед вызовом этой функции? – codeMagic

ответ

2

Я бы рискнул предположить, что вы инициализируете pm за пределами onCreate(). Это попытается инициализировать его, прежде чем вы на самом деле получили Context, и он вернет 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(); 

Все, что нуждается в Context внутренней части Activity необходимо инициализировать, в кратчайшие сроки, в onCreate() с Activity и его Context не инициализируются до этого.

+0

Он сказал: 'pm is PackageManager и объявлен в onCreate() как pm = getPackageManager()', поэтому я не думаю, что это проблема –

+0

@StefanoMunarini Я пропустил, где OP сказал, что он был инициализирован в 'onCreate()', но ответ был принят, поэтому, возможно, это было не до вызова метода, который его использует. – codeMagic

+0

Не принято, потому что он не декларировал разрешения и сказал мне выше! –

1

Вы объявили разрешения в манифесте?

<uses-permission android:name="android.permission.CAMERA" /> 
<uses-feature android:name="android.hardware.camera" /> 
<uses-feature android:name="android.hardware.camera.autofocus" /> 

И что такое pm? Где вы его устанавливаете? Кажется, вам не хватает.

+0

'pm' является PackageManager и объявлен в onCreate() как' pm = getPackageManager() ' – TN888

+0

Как насчет разрешений? –

+0

Я не замедлил это. Теперь я буду тестировать с такими разрешениями – TN888

0

Это означает, что вы не объявили или не инициализировали объект в этом методе ustawWidokMain. Повторите проверку или отладку, в какую строку вы получите ошибку.

+0

Нет, 'pm' является PackageManager и объявлен в onCreate() как' pm = getPackageManager() ' – TN888

+0

Должен иметь targetSdk> = 9, определенный в AndroidManifest. и требуется разрешение. –

+1

PackageManager pm = context.getPackageManager(); попробуйте с этим, а также проверьте Camera.getNumberOfCameras(), он дает вам номер камеры на вашем устройстве. –

Смежные вопросы