【问题标题】:NullPointerException in recording audio player android录制音频播放器android中的NullPointerException
【发布时间】:2014-03-26 18:57:06
【问题描述】:
package com.example.projectlayout;

import java.io.File;

import android.media.MediaRecorder;

import android.os.Bundle;

import android.os.Environment;

import android.os.SystemClock;

import android.app.Activity;

import android.content.Intent;

import android.view.Menu;

import android.view.View;

import android.widget.Chronometer;

import android.widget.Toast;


public class MainActivity extends Activity {

Chronometer time;
 int i=0;
MediaRecorder recorder;
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    time=(Chronometer)findViewById(R.id.chronometer1);
    String name="myrecord"+i++;
    File sdcard=Environment.getExternalStorageDirectory();
    System.out.println(sdcard.toString());
    File recording=new File(sdcard,"videoRecordingFileZ");
    if(!recording.exists())
    {
    System.out.println("inside if");
    recording.mkdir();
    }
String rec=recording.getAbsolutePath()+"/Record"+".3GP";
    try{                
    recorder.setAudioSource(MediaRecorder.AudioSource.MIC);
    recorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
  recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
    recorder.setOutputFile(rec);                                    
    recorder.prepare();
    }
    catch(Exception e){
    System.out.println(e);
    recorder.start();
    }}
   public void startrecording(View v)
    {
        Toast.makeText(MainActivity.this, "START RECORDING", Toast.LENGTH_LONG).show();
        time.setBase(SystemClock.elapsedRealtime());
        time.start();
    }
public void stoprecording(View v)
    {
        Toast.makeText(MainActivity.this, "STOP RECORDING", Toast.LENGTH_LONG).show();
        time.stop();
    }
    public void showrecording(View v)
    {
        Toast.makeText(MainActivity.this, "Show RECORDING", Toast.LENGTH_LONG).show();
        Intent i=new Intent(MainActivity.this,Showlist.class);
        startActivity(i);
    }
@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.main, menu);
    return true;
}}

Logcat:

03-27 00:49:22.224: E/AndroidRuntime(470): FATAL EXCEPTION: main

03-27 00:49:22.224: E/AndroidRuntime(470): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.projectlayout/com.example.projectlayout.MainActivity}: java.lang.NullPointerException

03-27 00:49:22.224: E/AndroidRuntime(470): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.projectlayout/com.example.projectlayout.MainActivity}: java.lang.NullPointerException

【问题讨论】:

    标签: android exception nullpointerexception android-mediarecorder


    【解决方案1】:

    您没有初始化 MediaRecorder:

     MediaRecorder recorder;
    

    你应该在 onCreate 方法中这样做:

     recorder = new MediaRecorder();
    

    在您使用 recorder 之前,否则您会收到 NullPointerException。

    顺便说一句:改进代码缩进(在 Eclipse Ctrl + I 键盘快捷键中)以提高代码的可读性


    关于下一个问题:IllegalStateException:

    检查 android 文档中的MediaRecorder state diagram

    以及提供的示例代码:

    MediaRecorder recorder = new MediaRecorder();
     recorder.setAudioSource(MediaRecorder.AudioSource.MIC);
     recorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
     recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
     recorder.setOutputFile(PATH_NAME);
     recorder.prepare();
     recorder.start();   // Recording is now started
     ...
     recorder.stop();
     recorder.reset();   // You can reuse the object by going back to setAudioSource() step
     recorder.release(); // Now the object cannot be reused
    

    【讨论】:

    • 好!您介意单击此答案旁边的接受按钮吗?这就是我们在 stackoverflow 将问题标记为已解决的方式。
    • 我的意思是 复选图标,它位于我答案的左上角。还要检查stackoverflow tour here ;-)
    【解决方案2】:

    如果您想获得异常帮助,您确实需要提供完整的错误消息和调用堆栈。

    话虽如此,我可以在您的代码中看到一个问题(假设您已提供所有相关部分)。

    'recorder' 成员变量从未被赋值,但在 onCreate() 的 try AND catch 子句中被取消引用。可能是导致 NullPointerException 的 catch 子句中的取消引用。

    【讨论】:

    • @user3465656:我删除了您添加到我的答案中的堆栈跟踪,因为它属于您的问题,而不是建议的答案之一。另请注意,您指定的对答案进行编辑的原因不会显示为该答案下的评论(出于某种原因)。
    • 我是新用户,所以我遇到了这个网站如何使用的问题,,,对不起
    • @user3465656:我明白:-)。此外,您插入的堆栈跟踪没有显示 NullPointerException - 这是整个堆栈跟踪,还是您更改了代码?请酌情修改您的问题。
    • 现在它的工作问题出在这一行我没有添加这一行 recorder.start();记录器.start();录音机.release();
    • 如果此问题已得到解答,但您有新的后续问题,请为此提交新问题。请记住包括相关的堆栈跟踪。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多