android工具类中自定义监听处理异步方法问题

概述

这次做的应用需要取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 stub
		pDialog.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
    收藏
    觉得还不错? 一键收藏
  • 7
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值