2017-01-07 3 views
-1

Я разрабатываю простую флеш-память, она работает, но есть только одна проблема, когда я нажимаю кнопку переключения, она включает свет, но когда я нажимаю снова, приложение падает ...Toggle Button разрушает приложение Android

package com.example.flashapp; 

import android.hardware.Camera; 
import android.os.Bundle; 
import android.app.*; 
import android.widget.CompoundButton; 
import android.widget.Toast; 
import android.widget.ToggleButton; 

public class MainActivity extends Activity { 

ToggleButton toggleButton; 
Camera camera; 

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

    toggleButton = (ToggleButton)findViewById(R.id.onOffFlashlight); 

    toggleButton.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { 
     @Override 
     public void onCheckedChanged(CompoundButton compoundButton,boolean checked) { 
       //ToDo something 
       camera = Camera.open(); 
       Camera.Parameters parameters = camera.getParameters(); 
       parameters.setFlashMode(Camera.Parameters.FLASH_MODE_TORCH); 
       camera.setParameters(parameters); 
       camera.startPreview(); 
       Toast.makeText(getApplicationContext(), "Flash Light is ON", Toast.LENGTH_LONG).show(); 
     } 
    }); 

} 

}

+0

возможно, вам нужно остановить просмотр, прежде чем начать его снова –

ответ

0

Вы всегда должны размещать журнал сбоев при сообщении об аварии здесь. Но в этом случае я действительно могу сказать вам, почему, поскольку вы никогда не отпускаете камеру, во второй раз, когда вы вызываете Camera.open(), он возвращает null, и вы вылетаете с NPE. Вы всегда должны отпускать камеру по завершении работы, и вам нужно закодировать код, в котором вы не можете получить камеру по какой-либо причине (другое приложение может ее использовать).

Кроме того, ваш флажок всегда захватывает камеру - невозможно отключить его, вы только закодировали на корпусе.

+0

Спасибо ... В следующий раз я буду делать это .... спасибо очень много чувака – Elias

0

Изменено нравится этот

toggleButton.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { 
    @Override 
    public void onCheckedChanged(CompoundButton compoundButton,boolean checked) { 

      if (isChecked) { 
       camera = Camera.open(); 
       Camera.Parameters parameters = camera.getParameters(); 
       parameters.setFlashMode(Camera.Parameters.FLASH_MODE_TORCH); 
       camera.setParameters(parameters); 
       camera.startPreview(); 
       Toast.makeText(getApplicationContext(), "Flash Light is ON", Toast.LENGTH_LONG).show(); 
      } 
      else { 
        // Code to switch off Flashlight 
      } 

    } 
});