android工具类中自定义监听处理异步方法问题
来源:互联网 发布:读研不要选女导师知乎 编辑:程序博客网 时间:2024/05/22 09:04
概述
这次做的应用需要取Json值(用GSON)和语音合成(SpeechSynthesize),开始测试时用了两个Acticity,一个取值,一个输出。中间用“public static String content;”调用就可以实现,不过在实际开发中,同一Activity中实现虽然容易,但个人觉得这样的代码很乱,所以写了两个工具类,其中一个涉及到了KJFrameForAndroid框架中的取Json值得异步方法。代码如下:
GetTicketInfo.java
kjHttp.urlGet("http://apis.juhe.cn/train/s", params, new StringCallBack() { @Override public void onSuccess(String arg0) {pDialog.dismiss();//progressdialog.dismiss// System.out.println("arg0=" + arg0);Gson gson = new Gson();TicketDTO ticketInfo = gson.fromJson(arg0, TicketDTO.class);returnStr = ticketInfo.getResultdto().getStation_list().get(0).getStation_name(); } @Override public void onFailure(Throwable t, int errorNo, String strMsg) {// TODO Auto-generated method stubpDialog.dismiss();<span style="font-family: Arial, Helvetica, sans-serif;">//progressdialog.dismiss</span>System.out.println("网络加载失败,请您检查网络"); }});取值之后,需要调用SpeechSynthesize工具类来合成语音,代码如下:
public void Speech(Context context,String content) {<span style="font-family: Arial, Helvetica, sans-serif;">// 1.创建 SpeechSynthesizer 对象</span>SpeechSynthesizer mTts = SpeechSynthesizer.createSynthesizer(context, null);// 2.合成参数设置,详见《科大讯飞MSC API手册(Android)》SpeechSynthesizer 类mTts.setParameter(SpeechConstant.VOICE_NAME, "xiaoyan");// 设置发音人mTts.setParameter(SpeechConstant.SPEED, "50");// 设置语速mTts.setParameter(SpeechConstant.VOLUME, "80");// 设置音量,范围 0~100// 设置合成音频保存位置(可自定义保存位置) ,保存在“./sdcard/iflytek.pcm”// 如果不需要保存合成音频,注释该行代码mTts.setParameter(SpeechConstant.TTS_AUDIO_PATH, "./sdcard/iflytek.pcm");// 3.开始合成dialog=new ProgressDialog(context); dialog.show();mTts.startSpeaking("测试文本"+content, mSynListener);//System.out.println(TempDatas.speech);}
"GetTicketInfo.java"的返回值为"String str;"
就在MainActivity中:
GetTicketInfo getTicketInfo =new GetTicketInfo(MainActivity.this);String returnStr=GetTicketInfo.Str;new SpeechSynthesizeUtility().Speech(MainActivity.this, returnStr);这种写法SpeechSynthesize是取到的值为"null";
经过各种写法和妄加判定之后,皆为"null",想要实现,却要改工具类?要改代码才能实现的功能的工具类,那还写什么。
那么问题来了,实现办法到底哪家强?我们来写个监听,在”GetTicketInfo.java“中加自定义,监听代码如下:
GetInfoListener getInfoListener; public void setGetInfoListener(GetInfoListener h) {this.getInfoListener = h; } public void onSuccess(String arg0) {//pDialog.dismiss();Gson gson = new Gson();TicketDTO ticketInfo = gson.fromJson(arg0, TicketDTO.class);returnStr = ticketInfo.getResultdto().getStation_list().get(0).getStation_name();getInfoListener.onGet(returnStr);//重点在这 , 只有这里取到值 才能继续执行 } public interface GetInfoListener {public abstract void onGet(String returnStr); }这样就可以在MainActivty中set监听了,代码如下 :
GetTicketInfo getTicketInfo = new GetTicketInfo(MainActivity.this);getTicketInfo.setGetInfoListener(new GetTicketInfo.GetInfoListener() { @Override public void onGet(String returnStr) {new SpeechSynthesizeUtility().Speech(MainActivity.this, returnStr); }});getTicketInfo.getTicketInfo("g4");这样问题迎刃而解
@author:JRwestbrook(zby)
QQ:990021331
支持原创,尊重原创,转载请注明出处
0 0
- android工具类中自定义监听处理异步方法问题
- android中自定义监听
- android 异步图片处理 工具类
- Android按键监听和AsyncTask异步处理
- Android开发中AsyncTask实现异步处理任务的方法
- Android开发中AsyncTask实现异步处理任务的方法
- Android开发中AsyncTask实现异步处理任务的方法
- Android异步处理常用方法
- 异步处理工具类:AsyncTask
- 异步处理工具类:AsyncTask
- quick-cocos2d 中自定义事件监听方法
- Android开发中执行方法中含有监听时的处理
- android getView中控件事件监听处理中取数据问题
- Android异步任务的处理方法
- Android中常用的bitmap处理方法 (bitmap工具类)
- 转 ::android多线程及异步问题 android异步处理 android多线程问题 android异步问题 android多线程处理
- 【转】Android多线程及异步处理问题
- Android多线程及异步处理问题
- 在线会计页面
- C++/C笔试面试题目大大的集合
- Testing Round #11
- mysql show processlist命令 详解
- ORACLE如何使用DBLINK连接另一个数据库
- android工具类中自定义监听处理异步方法问题
- PHP SPL 标准库
- 重拾算法之路——线性时间选择
- 在CView中如何得到CMainFrame的变量
- TestFlight——完美的iOS app测试方案
- Mac升级到OS X10.10系统以后cocoapods无法正常使用
- Hough变换(openCV的cvHoughLines2)
- 消息映射的實現
- HTML5的学习资料(开发设计原则)