2 bmw90 bmw90 于 2016.03.13 18:53 提问

安卓中内部类调用问题

在外部类方法OnCreate中创建了 new Record();内部类,可是在调用内部类的时候从下面?处就开始报错,为什么呢?
java.lang.IllegalStateException异常
@Override
public void onCreate() {

    super.onCreate();
    final Record record = new Record();
    // 获取电话管理者
    TelephonyManager telephonyManager = (TelephonyManager) this
            .getSystemService(Context.TELEPHONY_SERVICE);
    PhoneStateListener listener = new PhoneStateListener() {
        @Override
        public void onCallStateChanged(int state, String incomingNumber) {
            // TODO Auto-generated method stub
            super.onCallStateChanged(state, incomingNumber);
            switch (state) {
            case TelephonyManager.CALL_STATE_IDLE:
                android.util.Log.i("phonelisten", "待机状态");
                record.stopRecord();
                // Log.INFO(state,"待机状态");
                break;
            case TelephonyManager.CALL_STATE_OFFHOOK:
                android.util.Log.i("phonelisten", "通话状态");
                // 调用phoneRecord();方法来开启录音
                if (record.recorder != null) {
                    record.startRecord();
                }
                break;
            case TelephonyManager.CALL_STATE_RINGING:
                android.util.Log.i("phonelisten", "响铃状态");
                break;

            default:
                break;
            }
        }

    };
    // 设置监听时间securityExceptions安全问题需要权限
    telephonyManager.listen(listener, PhoneStateListener.LISTEN_CALL_STATE);

}

// 录音写一个内部类
class Record {
    MediaRecorder  recorder= new MediaRecorder();
    public void startRecord() {

        try {
            recorder.setAudioSource(MediaRecorder.AudioSource.MIC);
            recorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
            recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
            String str = Environment.getExternalStorageDirectory()
                    + "/receord83.3gp";
            recorder.setOutputFile(str);
            recorder.prepare();
            recorder.start(); // Recording is now started
        } catch (Exception e) {
            e.printStackTrace();
        }

    }

    public void stopRecord() {
        **recorder.stop();        ?????????????????这行开始出错**
        recorder.reset(); // You can reuse the object by going back to
        recorder.release(); // Now the object cannot be reused

    }

}

7个回答

bdmh
bdmh   Ds   Rxr 2016.03.13 20:04

报错信息是什么,看看日志

wen_wxpk
wen_wxpk   2016.03.14 08:40

我的理解是必须先开了才能关,所以前面要判断一下,没开过就不能执行关闭

dongfeng9ge
dongfeng9ge   Ds   Rxr 2016.03.14 09:29

你把logcat贴上来呀

dongfeng9ge
dongfeng9ge   Ds   Rxr 2016.03.14 09:29

你把logcat贴上来呀

dongfeng9ge
dongfeng9ge   Ds   Rxr 2016.03.14 09:30

你把logcat贴上来呀

dongfeng9ge
dongfeng9ge   Ds   Rxr 2016.03.14 09:30

你把logcat贴上来呀

dongfeng9ge
dongfeng9ge   Ds   Rxr 2016.03.14 09:30

你把logcat贴上来呀

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
android 匿名内部类使用外部类变量
方法中的变量必须final reason: 转载:http://m.blog.csdn.net/blog/lyl_tkb/38562857 如果定义一个匿名内部类,并且希望它使用一个在其外部定的对象,那么编译器会要求其参数引用是final的。  1.匿名内部类肯定是局部内部类(在一个方法里面定义的内部类),因为在java中,语句必须写在方法里,而匿名内部类其实就是一条特殊的语句;
android如何在xml中引用内部类的View
上周,有个同事在xml中引用内部类的View时候出错,问我在xml中能不能用内部类的View,我以前项目曾经这样做过,因此当时很肯定地告诉他可以。看了下他的代码,xml中的class属性引用的内部类写法错了,把“$”写成“.”,我让他改下就可以。他试完之后告诉我还是不行,我瞬间懵逼了。当时因时间关系,没时间去查错,让他先改为外部类处理。今天早上有空查看下系统源码,终于把这个问题搞清楚了。进入今天的正
android中的内部类
最近总被茫茫多的bug压在身上,深感烦躁,而且连续几天没有看源码了,鸭梨山大。最近忙里偷闲看了下内部类,赶紧找个时间把对它的一些感触记下来。让我们一起来看下,内部类在Android中的使用。所谓内部类,顾名思义,是定义在类内部的类。ok,来个简单的例子先。package Test; class Outer { private int a=100; class Inner{ private int a
Android中的内部类(以View的点击事件为例)
View点击事件:三种方式实现OnClickListener接口 1.创建内部类   创建一个内部类实现OnClickListener接口并重写onClick方法: protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentVie
使用外部类调用内部类的方法和变量
public class Test { public static void main(String[] args) { //第一种方式: Outter outter = new Outter(); Outter.Inner inner = outter.new Inner(); //必须通过Outter对象来创建 //第二种方式: Outter.Inner inner1
android-内部类导致的内存泄漏实战解析
参考: Android 如何有效的解决内存泄漏的问题 Java-内部类的相关知识非静态内部类: 成员内部类, 局部内部类、 匿名内部类。 会有对外部类的引用。内部类中耗时操作在用户频繁退出重启APP相关Activity时很容易导致内存泄漏。一、匿名内部类:Runnable1、泄漏版 new Thread(new Runnable() { @Override
匿名内部类中this的使用问题
大多数情况下,我在对Android的事件处理方式都是用的基于监听的事件处理方式。在这当中,一般都会涉及到事件监听器这样一个类。大部分的时候,事件监听器都没有什么复用价值,因此大部分的事件监听器只是临时使用一次,所以使用匿名内部类形式的事件监听器更合适。实际上,这种形式也是目前使用最广泛的事件监听器形式。一般用于创建匿名内部类形式的事件监听器都是像这样的:“new 监听器接口”或“new 事件适配器”
Java内部类调用报错
最近在看Java,在编译写书上一个例子时,由于书上的代码只有一部分,于是就自己补了一个内部类。结果编译时出现:No enclosing instance of type E is accessible. Must qualify the allocation with an enclosing instance of typeE(e.g.  x.new A() where x is an inst
android 调用内部类
https://www.jianshu.com/p/fbf45770ecc8
Java 使用内部类时候的容易产生的错误
Multiple markers at this line - No enclosing instance of type ChatServer is accessible. 这是由于内部类定义产生的错误, Java要生成内部类对象时,必须要有外部类对象。内部类对象可以拿到外部类对象的所有成员与方法,是因为java在创建内部类的同时,一定要同时生成一个指向外部对象的引用,如果编译器找不到正引