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
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 好哭的孩子老师怎么办 小孩哭的犟住怎么办 2-3小孩脾气很犟怎么办 生了孩子没奶怎么办 二年级孩子写作业慢怎么办 六年级下册数学解决问题差的怎么办 孩子五年级了学习成绩不好怎么办 孩子做错事不承认怎么办 二年级小孩拼音差怎么办 小学三年级数学60多分怎么办 孩子三年级了数学不开窍怎么办 初二数学太差该怎么办 孩子语文阅读理解能力差怎么办 5年级数学不开窍怎么办 一年级孩子数学不开窍怎么办 三年级孩子数学成绩差怎么办 孩子三年级数学太差怎么办 三年级孩子数学理解能力差怎么办 教小孩做作业老是发火怎么办 孩子拿笔重写字太黑怎么办 教小孩写不到汉字怎么办 一年级孩子数学理解能力差怎么办 小孩一年级数学学不好怎么办 孩子一年级数学学不好怎么办 小学一年级数学学不好怎么办 孩子一年级数学成绩不好怎么办 成绩差的孩子该怎么办 面对成绩差的孩子该怎么办 六年级数学成绩差该怎么办 孩子数学物理成绩差该怎么办 高三成绩很差该怎么办 孩子学习成绩差家长该怎么办 孩子一年级语文成绩不好怎么办 孩子上网成瘾不听父母话怎么办 10岁数学不开窍怎么办 孩子五年级数学不好怎么办 一岁宝宝难断奶怎么办 2岁宝宝断不了奶怎么办 快2岁宝宝不听话怎么办 2岁半的宝宝不听话怎么办 3岁宝宝哭闹不止怎么办