当前位置:  编程技术>移动开发
本页文章导读:
    ▪EditText addTextChangedListener 反复执行了TextWatcher        EditText addTextChangedListener 重复执行了TextWatcher 1. dialEtBox.addTextChangedListener(new PhoneNumberWatcher());   2. class PhoneNumberWatcher implements TextWatcher { // 为什么会执行两次 public void beforeTextChanged(CharSequ.........
    ▪ The surface has been released 错误        The surface has been released 异常 在使用surfaceView和MediaPlayer播放视频的时候出现了一个异常,纠结了很久,经过同事帮助,终于发现了问题的根源。   异常如下:   E/AndroidRuntime( 1765): Caused by: java.........
    ▪ 关于Canvas 保留的图片的面积与存储大小关系       关于Canvas 保存的图片的面积与存储大小关系         最最近在做android图像处理工具,用主要用Canvas来进行各种操作,当保存到手机存储卡中后,仔细分析图片的存储大小,发现图片的存储.........

[1]EditText addTextChangedListener 反复执行了TextWatcher
    来源: 互联网  发布时间: 2014-02-18
EditText addTextChangedListener 重复执行了TextWatcher

1.

dialEtBox.addTextChangedListener(new PhoneNumberWatcher());
 

2.

class PhoneNumberWatcher implements TextWatcher {
		// 为什么会执行两次
		
		public void beforeTextChanged(CharSequence s, int start, int count,
				int after) {
			System.out.println("beforeTextChanged--"
					+ dialEtBox.getText().toString());
		}

		public void onTextChanged(CharSequence s, int start, int before,
				int count) {
			System.out.println("onTextChanged--"
					+ dialEtBox.getText().toString());
		}

		public void afterTextChanged(Editable s) {
			System.out.println("afterTextChanged--"
					+ dialEtBox.getText().toString());
		}

	}

 

问题不是出自上面,而是,文本框中的文字改变的时候

 

public void updateEditText(String inputNumber) 
	{


		String newNumber = dialEtBox.getText().append(inputNumber).toString();//问题所在!
		
		dialEtBox.setText(newNumber);

		

	}

 改变EditText调用的是上面的方法

当执行

 

dialEtBox.getText().append(inputNumber)

 

实际上这里就已经执行了一次TextWatcher!!!

 

dialEtBox.setText(newNumber);

又执行了一次

 

需要注意的是:

dialEtBox.getText();返回的不是String,而是一个Editable对象

要将这个对象toString()之后再append内容!

 

改为这样就好了:

String newNumber =new StringBuilder(dialEtBox.getText().toString()).append(inputNumber).toString();

 

注意:先将EditText中的内容转为字符串dialEtBox.getText().toString() ,而不是仅仅dialEtBox.getText(); ,这样返回的是一个Editable对象,对这个对象的append会内TextWatcher接收到!

 

 


    
[2] The surface has been released 错误
    来源: 互联网  发布时间: 2014-02-18
The surface has been released 异常

在使用surfaceView和MediaPlayer播放视频的时候出现了一个异常,纠结了很久,经过同事帮助,终于发现了问题的根源。

 

异常如下:

 

E/AndroidRuntime( 1765): Caused by: java.lang.IllegalArgumentException: The surface has been released
E/AndroidRuntime( 1765):     at android.media.MediaPlayer._setVideoSurface(Native Method)
E/AndroidRuntime( 1765):     at android.media.MediaPlayer.setDisplay(MediaPlayer.java:633)

 

 

原因是在surfaceHolder还没准备好的时候,我就调用了MediaPlayer的start()方法。

 

正确的播放流程应该是:

 

        surfaceView = (SurfaceView) findViewById(R.id.PlaySurfaceView);
        surfaceHolder = surfaceView.getHolder();
        surfaceHolder.addCallback(this);

 

      mediaPlayer.setDisplay(surfaceHolder);

 

try {
           
            mediaPlayer.setDataSource(this, Uri.parse("/sdcard/bianxing.ts"));
           
        } catch (IllegalArgumentException e1) {
            e1.printStackTrace();
        } catch (SecurityException e1) {
            e1.printStackTrace();
        } catch (IllegalStateException e1) {
            e1.printStackTrace();
        } catch (IOException e1) {
            e1.printStackTrace();
        }
       
        try {
            mediaPlayer.prepare();
        } catch (IllegalStateException e1) {
            e1.printStackTrace();
        } catch (IOException e1) {
            e1.printStackTrace();
        }
       
        mediaPlayer.setOnPreparedListener(new OnPreparedListener() {
           
            @Override
            public void onPrepared(MediaPlayer mp) {
               
                mediaPlayer.start();
               
            }
        });

 

这样就可以正常播放了,唉,不容易啊,感谢同事的帮助。

 

其实对Medialayer的封装来说,VideoView已经做的很好了,自己再写这些确实费力,期望以后扩展会好点

 

1 楼 aduo_vip 2012-03-31  
请问
这里  surfaceHolder 跟mediaPlayer 没有关联吗?

mediaPlayer.setDisplay() 写在哪个地方呢
2 楼 dingran 2012-04-12  


aduo_vip 写道
请问
这里  surfaceHolder 跟mediaPlayer 没有关联吗?

mediaPlayer.setDisplay() 写在哪个地方呢



不好意思,少了点东西,应该是在addCallBack后设置:

mediaPlayer.setDisplay(surfaceHolder);

就是这个public void setDisplay(SurfaceHolder sh)

    
[3] 关于Canvas 保留的图片的面积与存储大小关系
    来源: 互联网  发布时间: 2014-02-18
关于Canvas 保存的图片的面积与存储大小关系

        最最近在做android图像处理工具,用主要用Canvas来进行各种操作,当保存到手机存储卡中后,仔细分析图片的存储大小,发现图片的存储大小只和图片的面积成线性关系(前提是处理同一图片)

即:

设要保存的一种大小的图片的面积为S1,存储大小为storage1,要保存的另一种一种大小的图片的面积为S2,存储大小为storage1,则有:


               S1              storage1

          —————   =   —————

               S2              storage2


当然了面积大的效果好,这点毋庸置疑,生成的图片如下


上传的图片如下

面积大的为hello1(500*500),面积小的为hello2(250*250)

 

 


    
最新技术文章:
▪Android开发之登录验证实例教程
▪Android开发之注册登录方法示例
▪Android获取手机SIM卡运营商信息的方法
▪Android实现将已发送的短信写入短信数据库的...
▪Android发送短信功能代码
▪Android根据电话号码获得联系人头像实例代码
▪Android中GPS定位的用法实例
▪Android实现退出时关闭所有Activity的方法
▪Android实现文件的分割和组装
▪Android录音应用实例教程
▪Android双击返回键退出程序的实现方法
▪Android实现侦听电池状态显示、电量及充电动...
▪Android获取当前已连接的wifi信号强度的方法
▪Android实现动态显示或隐藏密码输入框的内容
▪根据USER-AGENT判断手机类型并跳转到相应的app...
▪Android Touch事件分发过程详解
▪Android中实现为TextView添加多个可点击的文本
▪Android程序设计之AIDL实例详解
▪Android显式启动与隐式启动Activity的区别介绍
▪Android按钮单击事件的四种常用写法总结
▪Android消息处理机制Looper和Handler详解
▪Android实现Back功能代码片段总结
▪Android实用的代码片段 常用代码总结
▪Android实现弹出键盘的方法
▪Android中通过view方式获取当前Activity的屏幕截...
▪Android提高之自定义Menu(TabMenu)实现方法
▪Android提高之多方向抽屉实现方法
▪Android提高之MediaPlayer播放网络音频的实现方法...
▪Android提高之MediaPlayer播放网络视频的实现方法...
▪Android提高之手游转电视游戏的模拟操控
 


站内导航:


特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

©2012-2021,,E-mail:www_#163.com(请将#改为@)

浙ICP备11055608号-3