- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
尝试将相机切换回前面但出现异常。找不到 问题请检查并帮助..
error:- 01-27 11:49:00.376: E/AndroidRuntime(30767):
java.lang.RuntimeException: Unable to start activity
ComponentInfo{com.vdrecord/com.vdrecord.AndroidVideoCapture}:
java.lang.NullPointerException
我的代码:-
public class AndroidVideoCapture extends Activity{
private static final String TAG = "CameraRecorderActivity";
private Camera myCamera;
private MyCameraSurfaceView myCameraSurfaceView;
private MediaRecorder mediaRecorder;
private static String val="yes";
private Button useOtherCamera;
Button myButton;
SurfaceHolder surfaceHolder;
boolean recording;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
recording = false;
setContentView(R.layout.activity_android_video_capture);
useOtherCamera = (Button) findViewById(R.id.useOtherCamera);
useOtherCamera.setOnClickListener(
new View.OnClickListener() {
@Override
public void onClick(View v) {
//Get Camera for preview
myCamera = getCameraInstance();
}
});
FrameLayout myCameraPreview = (FrameLayout)findViewById(R.id.videoview);
myCameraPreview.addView(myCameraSurfaceView);
myButton = (Button)findViewById(R.id.mybutton);
myButton.setOnClickListener(myButtonOnClickListener);
myButton.setOnClickListener(myButtonOnClickListener);
if(myCamera == null){
System.out.println("PRINT TRACK--7 ");
Toast.makeText(AndroidVideoCapture.this,
"Fail to get Camera",
Toast.LENGTH_LONG).show();
}
myCameraSurfaceView = new MyCameraSurfaceView(this, myCamera);
}
Button.OnClickListener myButtonOnClickListener
= new Button.OnClickListener(){
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
if(recording){
// stop recording and release camera
mediaRecorder.stop(); // stop the recording
releaseMediaRecorder(); // release the MediaRecorder object
//Exit after saved
finish();
}else{
//Release Camera before MediaRecorder start
releaseCamera();
if(!prepareMediaRecorder()){
Toast.makeText(AndroidVideoCapture.this,
"Fail in prepareMediaRecorder()!\n - Ended -",
Toast.LENGTH_LONG).show();
finish();
}
mediaRecorder.start();
recording = true;
myButton.setText("STOP");
}
}};
public int getFrontCameraId() {
CameraInfo ci = new CameraInfo();
for (int i = 0 ; i < Camera.getNumberOfCameras(); i++) {
Camera.getCameraInfo(i, ci);
if ((val=="yes") && (ci.facing == CameraInfo.CAMERA_FACING_FRONT))
{
val="no";
return i;
}
}
return CameraInfo.CAMERA_FACING_BACK; // No front-facing camera found
}
public Camera getCameraInstance(){
// TODO Auto-generated method stub
Camera c = null;
try {
int index = getFrontCameraId();
if (index != -1)
{
c = Camera.open(index);
// c = Camera.open(); // attempt to get a Camera instance
}else{
c = Camera.open(index);
}
}
catch (Exception e){
Log.d(TAG, "Error setting camera preview: " + e.getMessage());
// Camera is not available (in use or does not exist)
}
return c; // returns null if camera is unavailable
}
private boolean prepareMediaRecorder(){
myCamera = getCameraInstance();
mediaRecorder = new MediaRecorder();
myCamera.unlock();
mediaRecorder.setCamera(myCamera);
mediaRecorder.setAudioSource(MediaRecorder.AudioSource.CAMCORDER);
mediaRecorder.setVideoSource(MediaRecorder.VideoSource.CAMERA);
mediaRecorder.setProfile(CamcorderProfile.get(CamcorderProfile.QUALITY_LOW));
mediaRecorder.setOutputFile("/sdcard/myvideo.mp4");
mediaRecorder.setMaxDuration(60000); // Set max duration 60 sec.
mediaRecorder.setMaxFileSize(5000000); // Set max file size 5M
mediaRecorder.setPreviewDisplay(myCameraSurfaceView.getHolder().getSurface());
try {
mediaRecorder.prepare();
} catch (IllegalStateException e) {
releaseMediaRecorder();
Log.d(TAG, "Error setting camera preview: " + e.getMessage());
return false;
} catch (IOException e) {
releaseMediaRecorder();
Log.d(TAG, "Error setting camera preview: " + e.getMessage());
return false;
}
return true;
}
@Override
protected void onPause() {
super.onPause();
releaseMediaRecorder(); // if you are using MediaRecorder, release it first
releaseCamera(); // release the camera immediately on pause event
}
private void releaseMediaRecorder(){
if (mediaRecorder != null) {
mediaRecorder.reset(); // clear recorder configuration
mediaRecorder.release(); // release the recorder object
mediaRecorder = null;
myCamera.lock(); // lock camera for later use
}
}
private void releaseCamera(){
if (myCamera != null){
myCamera.release(); // release the camera for other applications
myCamera = null;
}
}
public class MyCameraSurfaceView extends SurfaceView implements SurfaceHolder.Callback{
private SurfaceHolder mHolder;
private Camera mCamera;
public MyCameraSurfaceView(Context context, Camera camera) {
super(context);
mCamera = camera;
// Install a SurfaceHolder.Callback so we get notified when the
// underlying surface is created and destroyed.
mHolder = getHolder();
mHolder.addCallback(this);
// deprecated setting, but required on Android versions prior to 3.0
mHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
}
@Override
public void surfaceChanged(SurfaceHolder holder, int format, int weight,
int height) {
// If your preview can change or rotate, take care of those events here.
// Make sure to stop the preview before resizing or reformatting it.
if (mHolder.getSurface() == null){
// preview surface does not exist
return;
}
// stop preview before making changes
try {
mCamera.stopPreview();
} catch (Exception e){
Log.d(TAG, "Error setting camera preview: " + e.getMessage());
// ignore: tried to stop a non-existent preview
}
// make any resize, rotate or reformatting changes here
// start preview with new settings
try {
mCamera.setPreviewDisplay(mHolder);
mCamera.startPreview();
} catch (Exception e){
Log.d(TAG, "Error setting camera preview: " + e.getMessage());
}
}
@Override
public void surfaceCreated(SurfaceHolder holder) {
// TODO Auto-generated method stub
// The Surface has been created, now tell the camera where to draw the preview.
try {
mCamera.setPreviewDisplay(holder);
mCamera.startPreview();
} catch (IOException e) {
Log.d(TAG, "Error setting camera preview: " + e.getMessage());
}
}
@Override
public void surfaceDestroyed(SurfaceHolder holder) {
// TODO Auto-generated method stub
}
}
}
Error Log:- 01-27 11:49:00.376: E/AndroidRuntime(30767): FATAL
EXCEPTION: main 01-27 11:49:00.376: E/AndroidRuntime(30767):
java.lang.RuntimeException: Unable to start activity
ComponentInfo{com.vdrecord/com.vdrecord.AndroidVideoCapture}:
java.lang.NullPointerException 01-27 11:49:00.376:
E/AndroidRuntime(30767): at
android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1968)
01-27 11:49:00.376: E/AndroidRuntime(30767): at
android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1993)
01-27 11:49:00.376: E/AndroidRuntime(30767): at
android.app.ActivityThread.access$600(ActivityThread.java:127) 01-27
11:49:00.376: E/AndroidRuntime(30767): at
android.app.ActivityThread$H.handleMessage(ActivityThread.java:1159)
01-27 11:49:00.376: E/AndroidRuntime(30767): at
android.os.Handler.dispatchMessage(Handler.java:99) 01-27
11:49:00.376: E/AndroidRuntime(30767): at
android.os.Looper.loop(Looper.java:137) 01-27 11:49:00.376:
E/AndroidRuntime(30767): at
android.app.ActivityThread.main(ActivityThread.java:4507) 01-27
11:49:00.376: E/AndroidRuntime(30767): at
java.lang.reflect.Method.invokeNative(Native Method) 01-27
11:49:00.376: E/AndroidRuntime(30767): at
java.lang.reflect.Method.invoke(Method.java:511) 01-27 11:49:00.376:
E/AndroidRuntime(30767): at
com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:980)
01-27 11:49:00.376: E/AndroidRuntime(30767): at
com.android.internal.os.ZygoteInit.main(ZygoteInit.java:747) 01-27
11:49:00.376: E/AndroidRuntime(30767): at
dalvik.system.NativeStart.main(Native Method) 01-27 11:49:00.376:
E/AndroidRuntime(30767): Caused by: java.lang.NullPointerException
01-27 11:49:00.376: E/AndroidRuntime(30767): at
android.view.ViewGroup.addView(ViewGroup.java:3158) 01-27
11:49:00.376: E/AndroidRuntime(30767): at
android.view.ViewGroup.addView(ViewGroup.java:3145) 01-27
11:49:00.376: E/AndroidRuntime(30767): at
com.vdrecord.AndroidVideoCapture.onCreate(AndroidVideoCapture.java:51)
01-27 11:49:00.376: E/AndroidRuntime(30767): at
android.app.Activity.performCreate(Activity.java:4465) 01-27
11:49:00.376: E/AndroidRuntime(30767): at
android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1052)
01-27 11:49:00.376: E/AndroidRuntime(30767): at
android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1932)
最佳答案
在切换到其他实例之前停止相机上一个实例:
if (camera != null) {
camera.stopPreview();
camera.setPreviewCallback(null);
camera.release();
camera = null;
surfaceholder.removeCallback(CameraActivity.this);
surfaceholder = null;
}
并完成当前相机 Activity ,调用相同相机 Activity 的开始 Intent 。
关于android - 试图将相机切换回前面但出现异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14545031/
我打算使用 vulkan synchronization examples 之一作为如何处理不经常更新的统一缓冲区的引用。具体来说,我正在看这个: vkBeginCommandBuffer(...);
我对 git 的了解有限。 我已经从 master 创建了一个分支 B1,进行了一些编辑并提交到这个分支。 我想从 B1 创建另一个分支 B2,我在 B2 中进行了一些编辑 而且我还想提交 B2(包含
这是我做的 我创建了一个分支 abc。然后我创建了两个文本文件 one.txt 和 two.txt。然后我将它们提交到分支 abc。然后我从分支中删除文件 one.txt 并将这些更改提交到分支。 现
在我的主分支中,我得到了 2 个文件: file1.txt file2.txt 我从那里创建了名为 b1 的新分支。在b1中,我修改了file2.txt,不小心删除了file1.txt(从磁盘中,当我
我是 git 的新手。 我创建了一个分支,进行了更改,现在我想 merge 回 master 以使它们“永久化”。 所以我执行了 git merge 1.2 报告为已经是最新的,在 master 上执
我在一个新团队中,工作方式与我以前习惯的完全不同,我们在功能分支上工作,测试人员会在该功能分支上进行测试,然后我们会运行一个 jenkins 作业在该功能被测试签署时将该功能 merge 到开发中,根
我目前正在学习动态内存管理是如何工作的,更具体地说是 realloc 以及它是如何在函数中完成的。 在下面的程序中,我只是想尝试使用 malloc 在函数 a() 中分配一些数字,然后将它们传递给另一
在 Java 中如何从另一个线程分派(dispatch)回主 UI 线程?我正在使用带有 Runnable 的执行器在主 UI 线程之外做一些工作,并且我有一个接口(interface),以便可以通过
我在 git 中有一个项目,所有的事情都直接在 master 分支上完成,标签被用来标记代码的发布版本。我知道这并不理想,并且一直在查看 git 流程,例如:http://nvie.com/posts
我们有一个相当大的 GIT 存储库,我想删除从未 merge 回 master 的分支。 反过来也很好 - 一种列出在某个时候已 merge 到 master 中的所有分支的方法。 我希望首先获取一个
在 Swift 和 C 之间传递字符串时,我看到一些我不理解的行为。请考虑以下 Swift 函数: func demo() { print("\n\n\n\n")
我以前从未合作过,现在我发现自己需要与其他一些人分享这个项目,即使我将完成 90% 的开发工作。 我在 github 上有一个私有(private)仓库。我用 推送了我的初始源 git push or
我们的项目使用 Gitlab,我们有两个长期存在的分支:dev 和 master,类似于 Git Flow。我们正在使用“merge 提交”方法,它将在主分支中创建一个 merge 提交。 但是,由于
我对自定义 View 的绑定(bind)属性有疑问。该属性绑定(bind)到核心数据实体的 NSArrayController。 问题是这样的: 在我看来,我画了几个矩形。这些矩形的位置保存在核心数据
这对我来说似乎太棘手,无法正确执行此操作。 我有一个TreeMap ,我正在获取其中的子图: public static reqObj assignObj(reqObj vArg, i
我有以下 XAML: 所以,基本上我希望将其中一
我正在使用 Angular js 1.3.4 版本并使用 ui-select。 我正在将复杂的多级 JSON 对象数组绑定(bind)到此 ui-select,它工作正常。因此用户可以在此选择中选择任
我正在使用 WebAPI 构建 API,并且一直在使用 NLog 在整个堆栈中进行日志记录。我的 API 解决方案有两个主要项目,包括: 实现 Controller 和 webapi 东西的网站层本身
在 Git 中,给定 (1) 一个分支 A 和 (2) 一个在过去某个时间从 A 派生的分支 B,然后 merge 回 A,我如何才能找到现在 A 中起源于 B 的所有提交? 目的是确定现在在 A 中
假设我的 Controller 如下所示: public class myController { private MyCustomItem acte; ... // gett
我是一名优秀的程序员,十分优秀!