0
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:NullPointerException в записи аудио-плеер андроида

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 

ответ

1

Вы не инициализировать MediaRecorder:

MediaRecorder recorder; 

вы должны сделать это в OnCreate метод:

recorder = new MediaRecorder(); 

, прежде чем использовать ваш recorder или вы получите NullPointerException.

КСТАТИ: улучшить свой код отступы (в Затмении Ctrl + I же раскладка ярлыка), чтобы повысить читаемость вашего кода


о следующей проблеме: IllegalStateException:

Проверьте MediaRecorder state diagram от документации по андроиду: enter image description here

и предоставленный пример код:

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 
+1

да это работает сейчас thnx .. – kuberkashyap

+0

Хорошо! Не возражаете ли вы нажать кнопку «Принять» рядом с этим ответом? Именно так мы отмечаем проблемы, разрешенные в stackoverflow. – donfuxx

+0

где следующая кнопка – kuberkashyap

1

Вам действительно нужно, чтобы обеспечить полное сообщение об ошибке и стек вызовов, если вы хотите, чтобы получить помощь за исключением.

Сказав это, я вижу проблему в вашем коде (при условии, что вы предоставили все соответствующие части).

Членной переменной 'recorder' никогда не назначается значение, но разыменовывается в предложениях try catch on(). Вероятно, это различие в предложении catch, вызывающее исключение NullPointerException.

+3

@ user3465656: Я удалил добавленную к моему ответу трассировки стеки, так как он принадлежит в вашем вопросе, а не в одной из предложенных ответов. Также обратите внимание, что причина, по которой вы указываете для редактирования ответа, не отображается в качестве комментария в этом ответе (по какой-либо причине). – cybersam

+1

Я новый пользователь, поэтому я сталкиваюсь с проблемой этого веб-сайта, как использовать ,,, извините за ошибку – kuberkashyap

+0

@ user3465656: Я понимаю :-). Кроме того, трассировка стека, которую вы вставили, не отображает исключение NullPointerException - это все трассировка стека или вы изменили код? Пожалуйста, внесите изменения в свой вопрос. – cybersam

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