在Android应用中,添加在线翻译的功能,这里调用的是有道翻译的API。

使用有道翻译API,首先要申请一个key,申请地址为:有道翻译API申请地址。

申请之后就会得到一个keyfrom和一个key。

获取翻译结果的数据接口为:http://fanyi.youdao.com/openapi.do?keyfrom=<keyfrom>&key=<key>&type=data&doctype=<doctype>&version=1.1&q=要翻译的文本。我们只需要把内容拼接成这样,使用GET的方式,就能得到翻译的结果。

我翻译了“程序员”,接口返回的数据为:

{"translation": ["The programmer"],"basic": {"phonetic": "chéng xù yuán","explains": ["programmer"]},"query": "程序员","errorCode": 0,"web": [{"value": ["Programmer","CODER","SCJP"],"key": "程序员"},{"value": ["Systems Programmer","Java Card","system programmer"],"key": "系统程序员"},{"value": ["programmer","computer programmer","Job-InterviewComputer Programmer"],"key": "电脑程序员"}]
}

我们只需要从中解析出我们所需要的内容即可。

具体实现如下:

public class MainActivity extends Activity {private EditText edit = null;private TextView search = null;private TextView text = null;private String YouDaoBaseUrl = "http://fanyi.youdao.com/openapi.do";private String YouDaoKeyFrom = "YouDaoKeyFrom";private String YouDaoKey = "YouDaoKey";private String YouDaoType = "data";private String YouDaoDoctype = "json";private String YouDaoVersion = "1.1";private TranslateHandler handler;private static final int SUCCEE_RESULT = 10;private static final int ERROR_TEXT_TOO_LONG = 20;private static final int ERROR_CANNOT_TRANSLATE = 30;private static final int ERROR_UNSUPPORT_LANGUAGE = 40;private static final int ERROR_WRONG_KEY = 50;private static final int ERROR_WRONG_RESULT = 60;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);edit = (EditText) findViewById(R.id.edit);search = (TextView) findViewById(R.id.search);search.setOnClickListener(new searchListener());text = (TextView) findViewById(R.id.text);handler = new TranslateHandler(this, text);}private class searchListener implements OnClickListener {@Overridepublic void onClick(View v) {String content = edit.getText().toString().trim();if (content == null || "".equals(content)) {Toast.makeText(getApplicationContext(), "请输入要翻译的内容", Toast.LENGTH_SHORT).show();return;}final String YouDaoUrl = YouDaoBaseUrl + "?keyfrom=" + YouDaoKeyFrom + "&key=" + YouDaoKey + "&type="+ YouDaoType + "&doctype=" + YouDaoDoctype + "&type=" + YouDaoType + "&version=" + YouDaoVersion+ "&q=" + content;new Thread() {public void run() {try {AnalyzingOfJson(YouDaoUrl);} catch (Exception e) {e.printStackTrace();}};}.start();}}private void AnalyzingOfJson(String url) throws Exception {// 第一步,创建HttpGet对象HttpGet httpGet = new HttpGet(url);// 第二步,使用execute方法发送HTTP GET请求,并返回HttpResponse对象HttpResponse httpResponse = new DefaultHttpClient().execute(httpGet);if (httpResponse.getStatusLine().getStatusCode() == 200) {// 第三步,使用getEntity方法活得返回结果String result = EntityUtils.toString(httpResponse.getEntity());System.out.println("result:" + result);JSONArray jsonArray = new JSONArray("[" + result + "]");String message = null;for (int i = 0; i < jsonArray.length(); i++) {JSONObject jsonObject = jsonArray.getJSONObject(i);if (jsonObject != null) {String errorCode = jsonObject.getString("errorCode");if (errorCode.equals("20")) {handler.sendEmptyMessage(ERROR_TEXT_TOO_LONG);} else if (errorCode.equals("30 ")) {handler.sendEmptyMessage(ERROR_CANNOT_TRANSLATE);} else if (errorCode.equals("40")) {handler.sendEmptyMessage(ERROR_UNSUPPORT_LANGUAGE);} else if (errorCode.equals("50")) {handler.sendEmptyMessage(ERROR_WRONG_KEY);} else {Message msg = new Message();msg.what = SUCCEE_RESULT;// 要翻译的内容String query = jsonObject.getString("query");message = "翻译结果:";// 翻译内容Gson gson = new Gson();Type lt = new TypeToken<String[]>() {}.getType();String[] translations = gson.fromJson(jsonObject.getString("translation"), lt);for (String translation : translations) {message += "\t" + translation;}// 有道词典-基本词典if (jsonObject.has("basic")) {JSONObject basic = jsonObject.getJSONObject("basic");if (basic.has("phonetic")) {String phonetic = basic.getString("phonetic");// message += "\n\t" + phonetic;}if (basic.has("explains")) {String explains = basic.getString("explains");// message += "\n\t" + explains;}}// 有道词典-网络释义if (jsonObject.has("web")) {String web = jsonObject.getString("web");JSONArray webString = new JSONArray("[" + web + "]");message += "\n网络释义:";JSONArray webArray = webString.getJSONArray(0);int count = 0;while (!webArray.isNull(count)) {if (webArray.getJSONObject(count).has("key")) {String key = webArray.getJSONObject(count).getString("key");message += "\n(" + (count + 1) + ")" + key + "\n";}if (webArray.getJSONObject(count).has("value")) {String[] values = gson.fromJson(webArray.getJSONObject(count).getString("value"),lt);for (int j = 0; j < values.length; j++) {String value = values[j];message += value;if (j < values.length - 1) {message += ",";}}}count++;}}msg.obj = message;handler.sendMessage(msg);}}}text.setText(message);} else {handler.sendEmptyMessage(ERROR_WRONG_RESULT);}}private class TranslateHandler extends Handler {private Context mContext;private TextView mTextView;public TranslateHandler(Context context, TextView textView) {this.mContext = context;this.mTextView = textView;}@Overridepublic void handleMessage(Message msg) {switch (msg.what) {case SUCCEE_RESULT:mTextView.setText((String) msg.obj);closeInput();break;case ERROR_TEXT_TOO_LONG:Toast.makeText(mContext, "要翻译的文本过长", Toast.LENGTH_SHORT).show();break;case ERROR_CANNOT_TRANSLATE:Toast.makeText(mContext, "无法进行有效的翻译", Toast.LENGTH_SHORT).show();break;case ERROR_UNSUPPORT_LANGUAGE:Toast.makeText(mContext, "不支持的语言类型", Toast.LENGTH_SHORT).show();break;case ERROR_WRONG_KEY:Toast.makeText(mContext, "无效的key", Toast.LENGTH_SHORT).show();break;case ERROR_WRONG_RESULT:Toast.makeText(mContext, "提取异常", Toast.LENGTH_SHORT).show();break;default:break;}super.handleMessage(msg);}}public void closeInput() {InputMethodManager inputMethodManager = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);if ((inputMethodManager != null) && (this.getCurrentFocus() != null)) {inputMethodManager.hideSoftInputFromWindow(this.getCurrentFocus().getWindowToken(),InputMethodManager.HIDE_NOT_ALWAYS);}}
}

看一下效果:

补充:翻译的文本应该要经过编码才可以,防止特殊字符。 URLEncoder.encode(content);

Demo下载地址:http://download.csdn.net/detail/u014375869/8844145

Android使用有道翻译API实现在线翻译功能相关推荐

  1. python利用mysql数据库实现一个中英文翻译程序兼单词试卷生成并改阅功能,并可以爬取有道官网进行在线翻译。

    直接上运行截图(代码在后面) 开始界面 使用navicat查看mysql数据库中的数据 单词查询功能测试 本地翻译一个本地数据库中有的单词 本地翻译一个本地数据库中没有的单词 爬取有道官网进行在线翻译 ...

  2. 基于python爬取有道翻译,并在线翻译

    基于python爬取有道翻译,并在线翻译 由于我也是爬虫新学者,有什么做的不对的请多加包涵 我们需要使用的库如下 from urllib import request import urllib im ...

  3. 利用有道翻译Api实现英文翻译功能

    有道翻译提供了翻译和查词的数据接口.通过数据接口,您可以获得一段文本的翻译结果或者查词结果.       通过调用有道翻译API数据接口,您可以在您的网站或应用中更灵活地定制翻译和查词功能. 第一步: ...

  4. php英文翻译,利用有道翻译Api实现英文翻译效能

    利用有道翻译Api实现英文翻译功能 有道翻译提供了翻译和查词的数据接口.通过数据接口,您可以获得一段文本的翻译结果或者查词结果.       通过调用有道翻译API数据接口,您可以在您的网站或应用中更 ...

  5. 【新手】基于C++Qt5通过调用百度翻译API制作简易翻译工具

    基于C++Qt5通过调用百度翻译API制作简易翻译工具 目录 基于C++Qt5通过调用百度翻译API制作简易翻译工具 写在前面 步骤: 1.注册百度翻译开放平台账号并开通翻译服务 2.下载安装Qt5和 ...

  6. Android开发——手把手写APP(三)调用有道词典翻译API实现的翻译APP(详细备注解读)

    运行效果图 有道翻译的API http://fanyi.youdao.com/openapi.do?keyfrom=lewe518&key=70654389&type=data& ...

  7. 百度api翻译html,百度在线翻译API (使用实例)

    [实例简介] 在http://api.fanyi.baidu.com/ 注册API使用的ID就可以使用的翻译工具,简化翻译过程,不用每次都打开网页. [实例截图]需要字自己注册APIID才行哦 [核心 ...

  8. api翻译器在线翻译多语种

    翻译器在线翻译多语种可以将我们的中文翻译成英文.日文.韩文等多国文字.翻译器在线翻译通过对接Google翻译等大厂翻译接口,实现在线中英多语言翻译和中文简体字繁体字转换. 翻译器在线翻译支持多篇文章批 ...

  9. python代码翻译-python实现在线翻译

    本文实例为大家分享了python实现在线翻译的具体代码,供大家参考,具体内容如下 具体效果请看图 代码: import urllib.request import urllib.parse impor ...

  10. python发音翻译-python实现在线翻译

    本文实例为大家分享了python实现在线翻译的具体代码,供大家参考,具体内容如下 具体效果请看图 代码: import urllib.request import urllib.parse impor ...

最新文章

  1. Leetcode: Spiral Matrix
  2. 23.2 编写笨的程序
  3. 【7】nagios从零学习使用 - nrpe插件使用
  4. 利用tcpdump抓取mysql sql语句
  5. python基础知识四——局部作用域和//运算符
  6. Spring 工厂的相关的方法
  7. 一个小米SRE的日常问题排查记录
  8. 二维数组求最小值_05-最大子矩形-最大值减去最小值小于或等于num的子数组数量...
  9. redis订阅怎么退出_redis订阅关闭异常解决
  10. 08-02 性能测试--负载模型与压力来源
  11. python有哪几种类型转换方式_Python 中各种时间类型的转换
  12. day8--socket回顾
  13. 杰理之ANS 参数【篇】
  14. 大学计算机人工智能知识点,人工智能及其应用知识点整理
  15. 【PYTHON,WORD】3.调整Word文档样式
  16. 在Github新建项目
  17. DNS(域名解析系统)协议
  18. 微信公众号实现“一键关注”功能
  19. 黑人是晒黑的吗_当您是互联网上的黑人时,无处可逃
  20. 当当网系统分级与海量信息动态发布实践

热门文章

  1. 18年一剑!德州心脏研究所研制出磁悬浮心脏,每秒2000转,为心衰患者续命
  2. freecodecamp小练习——Falsy Bouncer过滤数组假值
  3. 金融科技——预测银行贷款
  4. 深度学习分类问题中accuracy等评价指标的理解
  5. 手机支付宝,微信的请求userAgent
  6. vue基于vant实现上拉加载下拉刷新
  7. 清华大学计算机系毕业论文 android,清华大学计算机科学与技术系
  8. 独孤求败姜贵昌,铁拳无敌姜万福
  9. 【期末复习】网络攻击与防御
  10. linux暂停命令 pause_Linux-pause(2)的使用(day10)