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

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

path=data-mode">有道翻译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; @Override
protected 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 {
@Override
public 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;
} @Override
public 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. 百度翻译api 实现简易微信翻译小程序

    介绍 口袋翻译 口袋翻译 微信小程序 翻译功能 含7类语言的相互翻译 包含最近10条的翻译历史回溯功能 微信搜索:简e翻译 功能展示   使用百度翻译api需要申请 appid 与 key 并在 ap ...

  2. WebView调用有道词典实如今线查词

        WebView(网络视图)能载入显示网页,能够将其视为一个浏览器.它使用了WebKit渲染引擎载入显示网页,用法非常easy,直接在XML文件里写入webview控件就可以,主要代码例如以下: ...

  3. Python 调用百度翻译API

    由于实习公司这边做的是日文app,有时要看看用户反馈,对于我这种五十音图都没记住的人,表示百度翻译确实还可以.但不想每次都复制粘贴啊,google被墙也是挺蛋疼的事,所以用python结合baidu ...

  4. WP8.1小梦词典开发2:百度翻译API使用

    原文出自:http://www.bcmeng.com/api2/ 小梦昨天和大家分享了WP8.1金山词霸API使用方法,今天继续分享windows phone 8.1中百度翻译API的使用方法.和昨天 ...

  5. 小白学Python——用 百度翻译API 实现 翻译功能

    本人英语不好,很多词组不认识,只能借助工具:百度翻译和谷歌翻译都不错,近期自学Python,就想能否自己设计一个百度翻译软件呢? 百度翻译开放平台: http://api.fanyi.baidu.co ...

  6. 申请百度翻译API

    申请百度翻译API 0x00 前期准备 百度账号 md5的相关知识 0x01 进入百度开放平台,登录你的百度账号 找到 产品服务 -> 通用翻译API 0x02 点击下面的立即使用按钮,注册成为 ...

  7. [Python] 使用有道翻译API

    Python 使用youdao (有道翻译)API 想写一个给自己记录背单词状况的软件,需要获取英文单词的中文释义(基本功能).考虑使用有道翻译的API实现获取英文单词的中文释义的方法. 获取API_ ...

  8. 调用有道翻译API

    前两天朋友说起NASA开放了数据API,今儿突然想起从来没用过外部提供的API,然而简单用得多的貌似是有道词典API,就像试试,本来觉得应该挺简单的,用urllib模块很快就实现了. 不过测试时才发现 ...

  9. 记微信开发(有道翻译api)

    记微信开发(有道翻译api) 记微信开发(有道翻译api) 效果: 有道翻译api申请: 地址:http://fanyi.youdao.com/openapi code: <?php/** * ...

随机推荐

  1. 例说Linux内核链表(三)

    经常使用的linux内核双向链表API介绍 linux link list结构图例如以下: 内核双向链表的在linux内核中的位置:/include/linux/list.h 使用双向链表的过程,主要 ...

  2. 上机题目(中级)- 用小数形式输出指定符号出现的频率 (Java)

    题目例如以下:

  3. angular4父组件向子组件传值,子组件向父组件传值的方法

    父组件向子组件传值   @Input 文件目录 父组件: father.template.html <h1>父组件</h1> <cmt-child [data]='dat ...

  4. Java做一个时间的程序,为什么要除以1000*60*60*24啊。这个数字是什么意思啊。

    1000耗秒(1秒),60秒(1分),60分(1小时),24小时(1天)

  5. C#——单元测试

    测试搭建请看:http://www.cnblogs.com/Look_Sun/p/4514732.html 右键不出现Generate Unit Test选项请参考:http://www.jb51.n ...

  6. Memcache相关面试题

    1)memcached的cache机制是怎样的? 懒惰算法 +最近最少使用原则 2)memcached如何实现冗余机制? 冗余:就是有好多好多不经常使用的. 可以不用实现冗余机制,如果非要实现.那就搞 ...

  7. Firefox Quantum:开发者版本 推荐

    为生民,不谋利 欢迎您使用 Firefox 开发者版本.使用此版本可获得最新功能.高速性能,以及您打造开放 Web 所需的开发工具. https://www.mozilla.org/zh-CN/fir ...

  8. Android实现图片相似度

    Android实现图片相似度 最近公司有一个需求,就是希望能判断用户提交的照片是否是身份证的正面或者反面.可以通过预设一张拍摄清晰的身份证正面或者反面,来对比是否相似,那么问题就转化为如何计算两张图片 ...

  9. SSH三个主流框架环境的搭建

    part 1  Hibernate环境的搭建 part2  struts2环境的搭建 第一步:从struts2官网下载需要的各种资料和jar包 第二步:在ecplise里面创建web项目,然后在web ...

  10. ZBrush 4R7中为笔刷设置快捷键

    为了便于雕刻.提高雕刻速度,ZBrush®不仅很人性化地设计了自定义笔刷,用户还可以自行设置笔刷快捷键,步骤如下. ZBrush 4R8下载:http://wm.makeding.com/iclk/? ...