首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >setContentView故障

setContentView故障
EN

Stack Overflow用户
提问于 2011-12-26 18:28:57
回答 1查看 469关注 0票数 0

我正在尝试做这个应用程序:http://developer.android.com/guide/topics/media/audio-capture.html

我的问题是,当我评论setContentView(11)行时,一切都很好,但应用程序什么也不做。当我不评论这一行时,它会出现两个臀部,但当我按其中一个按钮时,应用程序就会崩溃。

我使用的是Android2.1AVD,API 7,并添加了sdcard、audioOutput和audioInput。

我添加了行:在清单文件中。

我所做的另一个观察是:我不知道音频文件存储在哪里,但我不确定这是否有任何问题。

提前谢谢你!

我的代码是:

代码语言:javascript
复制
package com.example.helloandroid;

import java.io.IOException;

import android.app.Activity;
import android.media.MediaPlayer;
import android.media.MediaRecorder;
import android.os.Bundle;
import android.os.Environment;
import android.widget.Button;
import android.widget.LinearLayout;
import android.view.View;
import android.view.ViewGroup;
import android.content.Context;
import android.util.Log;
/**
 * @author Natalia
 *
 */
public class HelloAndroidActivity extends Activity {
private static final String LOG_TAG = "AudioRecordTest";
private static String mFileName = null;
private RecordButton mRecordButton = null;
private MediaRecorder mRecorder = null; 
private PlayButton   mPlayButton = null; 
private MediaPlayer   mPlayer = null;

public static final int MODE_WORLD_WRITEABLE=0x00000002;


//path = "/sdcard/hola.3gp";
private void onRecord(boolean start) {
        if (start) {        
    startRecording();       
 } else { 
           stopRecording(); 
       }    
        } 
   private void onPlay(boolean start) {   
     if (start) {   
         startPlaying();  
      } else {   
         stopPlaying();     
   }    }    
private void startPlaying() { 
       mPlayer = new MediaPlayer(); 
       try {          
  mPlayer.setDataSource(mFileName); 
           mPlayer.prepare(); 
           mPlayer.start();
        } catch (IOException e) 
        { 
           Log.e(LOG_TAG, "prepare() failed");   
     }    
}   
 private void stopPlaying() {   
     mPlayer.release();      
  mPlayer = null;    }    
private void startRecording() {   
     mRecorder = new MediaRecorder();   
     mRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
        mRecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP); 
      
        mRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
       mRecorder.setOutputFile(mFileName);
        try {            
mRecorder.prepare(); 
       } 
catch (IOException e) { 
           Log.e(LOG_TAG, "prepare() failed");   
     }      
 mRecorder.start();    
 } 
   private void stopRecording() { 
mRecorder.stop();        
mRecorder.release();        
mRecorder = null;   
 }
    class RecordButton extends Button { 
        boolean mStartRecording = true;
         OnClickListener clicker = new OnClickListener() { 
            public void onClick(View v) { 
                onRecord(mStartRecording); 
                if (mStartRecording) { 
                    setText("Stop recording");
                 } 
 else {            
         setText("Start recording");
                 }          
       mStartRecording = !mStartRecording;       
      }        };    
    public RecordButton(Context ctx) {  
           super(ctx);          
   setText("Start recording");  
           setOnClickListener(clicker);        }
       } 
       class PlayButton extends Button {    
     boolean mStartPlaying = true;        
 OnClickListener clicker = new OnClickListener() {          
       public void onClick(View v) {               
  onPlay(mStartPlaying);                
 if (mStartPlaying) {                  
   setText("Stop playing");                
 } else {                    
 setText("Start playing");   
              }            
     mStartPlaying = !mStartPlaying;  
           }        };     
    public PlayButton(Context ctx) {      
       super(ctx);            
 setText("Start playing");         
    setOnClickListener(clicker);        }
 }

       public void HelloAndroidActivity() {  
        mFileName = Environment.getExternalStorageDirectory().getAbsolutePath();    
      mFileName += "/sdcard/hola.3gp";    }
       @Override            
   public void onCreate(Bundle icicle) {        
  super.onCreate(icicle);    
   LinearLayout ll = new LinearLayout(this);  
        mRecordButton = new RecordButton(this);       
   ll.addView(mRecordButton,     
         new LinearLayout.LayoutParams(             
     ViewGroup.LayoutParams.WRAP_CONTENT,          
        ViewGroup.LayoutParams.WRAP_CONTENT,          
        0));       
   mPlayButton = new PlayButton(this);     
     ll.addView(mPlayButton,      
        new LinearLayout.LayoutParams(  
                ViewGroup.LayoutParams.WRAP_CONTENT,  
                ViewGroup.LayoutParams.WRAP_CONTENT,         
         0));        
     //setContentView(ll);    
   } 
       @Override
     public void onPause() { 
         super.onPause();        
  if (mRecorder != null) {         
     mRecorder.release();  
            mRecorder = null;        }  
        if (mPlayer != null) {   
           mPlayer.release();
              mPlayer = null;       
   }    }

    

   }

对不起,这是一场小小的灾难!

这些是我的错误(我刚刚用相同的代码创建了一个新的活动):

12-27 12:04:55.456: E/AndroidRuntime(411):致命异常: main

12-27 12:04:55.456: E/AndroidRuntime(411):java.lang.IllegalStateException

12-27 12:04:55.456: E/AndroidRuntime(411):at android.media.MediaRecorder.start(原生方法)

12-27 12:04:55.456: E/AndroidRuntime(411):at Radar.packageRadar.app.Radar2Activity.startRecording(Radar2Activity.java:60)

12-27 12:04:55.456: E/AndroidRuntime(411):at Radar.packageRadar.app.Radar2Activity.onRecord(Radar2Activity.java:30)

12-27 12:04:55.456: E/AndroidRuntime(411):at Radar.packageRadar.app.Radar2Activity.access$0(Radar2Activity.java:28)

12-27 12:04:55.456: E/AndroidRuntime(411):at Radar.packageRadar.app.Radar2Activity$RecordButton$1.onClick(Radar2Activity.java:71)

12-27 12:04:55.456: E/AndroidRuntime(411):at android.view.View.performClick(View.java:2408)

12-27 12:04:55.456: E/AndroidRuntime(411):at android.view.View$PerformClick.run(View.java:8816)

12-27 12:04:55.456: E/AndroidRuntime(411):at android.os.Handler.handleCallback(Handler.java:587)

12-27 12:04:55.456: E/AndroidRuntime(411):at android.os.Handler.dispatchMessage(Handler.java:92)

12:27 12:04:55.456: E/AndroidRuntime(411):at android.os.Looper.loop(Looper.java:123)

12-27 12:04:55.456: E/AndroidRuntime(411):at android.app.ActivityThread.main(ActivityThread.java:4627)

12-27 12:04:55.456: E/AndroidRuntime(411):at java.lang.reflect.Method.invokeNative(原生方法)

12-27 12:04:55.456: E/AndroidRuntime(411):at java.lang.reflect.Method.invoke(Method.java:521)

12-27 12:04:55.456: E/AndroidRuntime(411):at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)

12-27 12:04:55.456: E/AndroidRuntime(411):at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)

12-27 12:04:55.456: E/AndroidRuntime(411):at dalvik.system.NativeStart.main(原生方法)

EN

回答 1

Stack Overflow用户

发布于 2011-12-27 11:33:01

在使用setContentView()进行任何工作之前,必须调用Views。把电话放在super.onCreate()线后面,你就会没事的。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8638192

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档