【问题标题】:Flashlight ON/OFF App is crashing手电筒开/关应用程序崩溃
【发布时间】:2014-03-02 21:46:40
【问题描述】:

我在这里找到了一个切换手机灯的示例: http://www.mkyong.com/android/how-to-turn-onoff-camera-ledflashlight-in-android/

所以我为我的应用剪掉了一些代码并得到了一个错误。

03-02 21:31:28.066: E/AndroidRuntime(1591): FATAL EXCEPTION: main
03-02 21:31:28.066: E/AndroidRuntime(1591): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.kaltech.led/com.kaltech.led.ActivityMAIN}: java.lang.NullPointerException
03-02 21:31:28.066: E/AndroidRuntime(1591):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2059)
03-02 21:31:28.066: E/AndroidRuntime(1591):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2084)
03-02 21:31:28.066: E/AndroidRuntime(1591):     at android.app.ActivityThread.access$600(ActivityThread.java:130)
03-02 21:31:28.066: E/AndroidRuntime(1591):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1195)
03-02 21:31:28.066: E/AndroidRuntime(1591):     at android.os.Handler.dispatchMessage(Handler.java:99)
03-02 21:31:28.066: E/AndroidRuntime(1591):     at android.os.Looper.loop(Looper.java:137)
03-02 21:31:28.066: E/AndroidRuntime(1591):     at android.app.ActivityThread.main(ActivityThread.java:4745)
03-02 21:31:28.066: E/AndroidRuntime(1591):     at java.lang.reflect.Method.invokeNative(Native Method)
03-02 21:31:28.066: E/AndroidRuntime(1591):     at java.lang.reflect.Method.invoke(Method.java:511)
03-02 21:31:28.066: E/AndroidRuntime(1591):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786)
03-02 21:31:28.066: E/AndroidRuntime(1591):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
03-02 21:31:28.066: E/AndroidRuntime(1591):     at dalvik.system.NativeStart.main(Native Method)
03-02 21:31:28.066: E/AndroidRuntime(1591): Caused by: java.lang.NullPointerException
03-02 21:31:28.066: E/AndroidRuntime(1591):     at com.kaltech.led.ActivityMAIN.onCreate(ActivityMAIN.java:40)
03-02 21:31:28.066: E/AndroidRuntime(1591):     at android.app.Activity.performCreate(Activity.java:5008)
03-02 21:31:28.066: E/AndroidRuntime(1591):     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1079)
03-02 21:31:28.066: E/AndroidRuntime(1591):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2023)
03-02 21:31:28.066: E/AndroidRuntime(1591):     ... 11 more

编辑:

@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

          bat_status = (ImageView)findViewById(R.id.bat_stat);
          mySwitch = (Switch) findViewById(R.id.switch_signal);

          Context context = this;
          PackageManager pm = context.getPackageManager();

          if (!pm.hasSystemFeature(PackageManager.FEATURE_CAMERA)) {
                Log.e("err", "Device has no camera!");
                return;
            }

          camera = Camera.open();
          final Parameters p = camera.getParameters();

          mySwitch.setChecked(false);
          mySwitch.setOnCheckedChangeListener(new OnCheckedChangeListener() {


           @Override
           public void onCheckedChanged(CompoundButton buttonView,boolean isChecked) {

            if(isChecked){                                                              //EIN
             bat_status.setImageResource(R.drawable.bat_signal_1);

             p.setFlashMode(Parameters.FLASH_MODE_TORCH);

                camera.setParameters(p);
                camera.startPreview();
                isLighOn = true;

            }
            else{                                                                       //AUS
                bat_status.setImageResource(R.drawable.bat_signal_2);

                p.setFlashMode(Parameters.FLASH_MODE_OFF);
                camera.setParameters(p);
                camera.stopPreview();
                isLighOn = false;
            }

           }
          });


         }

编辑 2:

最终参数 p = camera.getParameters(); //第40行

【问题讨论】:

  • 您的 NullPointerException 发生在 ActivityMAIN 的第 40 行。这条线是什么?请发布您的整个 onCreate() 方法。
  • 好的,您的camera 为空,请参阅下文并检查适用于您的情况。
  • 如果您在模拟器上运行应用程序,请记住启用 AVD 上的摄像头。

标签: java android flashlight


【解决方案1】:

您在第 40 行得到 NullPointerException,即:

final Parameters p = camera.getParameters();

camera 对象很可能为空。您正在使用以下方法对其进行初始化:

camera = Camera.open();

和Camera.open():

创建一个新的 Camera 对象以访问设备上的第一个后置摄像头。如果设备没有后置摄像头,则返回 null。

检查您的相机是否为空,然后才继续,例如:

camera = Camera.open();

if (camera != null) {
    //normal code
}
else {
    //ERROR, camera is null
}

你可能会得到这个,因为:

  • 设备没有后置摄像头
  • 你忘了添加

    <uses-permission android:name="android.permission.CAMERA" />
    

在您的 AndroidManifest 中。

【讨论】:

  • 非常感谢!真的可以理解
猜你喜欢
  • 2023-03-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-12-12
  • 2014-06-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多