热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Android使用有道翻译API实如今线翻译功能

在Android应用中,加入在线翻译的功能,这里调用的是有道翻译的API。使用有道翻译API。首先要申请一个key,申请地址为:pathdata-mode有道翻译API申请地址。

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

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


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

获取翻译结果的数据接口为:http://fanyi.youdao.com/openapi.do?

keyfrom=&key=&type=data&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 () {
						}.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 看一下效果: 
 



补充:翻译的文本应该要经过编码才干够,防止特殊字符。

 URLEncoder.encode(content);

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


推荐阅读
  • Java容器中的compareto方法排序原理解析
    本文从源码解析Java容器中的compareto方法的排序原理,讲解了在使用数组存储数据时的限制以及存储效率的问题。同时提到了Redis的五大数据结构和list、set等知识点,回忆了作者大学时代的Java学习经历。文章以作者做的思维导图作为目录,展示了整个讲解过程。 ... [详细]
  • 阿,里,云,物,联网,net,core,客户端,czgl,aliiotclient, ... [详细]
  • Spring特性实现接口多类的动态调用详解
    本文详细介绍了如何使用Spring特性实现接口多类的动态调用。通过对Spring IoC容器的基础类BeanFactory和ApplicationContext的介绍,以及getBeansOfType方法的应用,解决了在实际工作中遇到的接口及多个实现类的问题。同时,文章还提到了SPI使用的不便之处,并介绍了借助ApplicationContext实现需求的方法。阅读本文,你将了解到Spring特性的实现原理和实际应用方式。 ... [详细]
  • XML介绍与使用的概述及标签规则
    本文介绍了XML的基本概念和用途,包括XML的可扩展性和标签的自定义特性。同时还详细解释了XML标签的规则,包括标签的尖括号和合法标识符的组成,标签必须成对出现的原则以及特殊标签的使用方法。通过本文的阅读,读者可以对XML的基本知识有一个全面的了解。 ... [详细]
  • 本文详细介绍了Java中vector的使用方法和相关知识,包括vector类的功能、构造方法和使用注意事项。通过使用vector类,可以方便地实现动态数组的功能,并且可以随意插入不同类型的对象,进行查找、插入和删除操作。这篇文章对于需要频繁进行查找、插入和删除操作的情况下,使用vector类是一个很好的选择。 ... [详细]
  • 从零学Java(10)之方法详解,喷打野你真的没我6!
    本文介绍了从零学Java系列中的第10篇文章,详解了Java中的方法。同时讨论了打野过程中喷打野的影响,以及金色打野刀对经济的增加和线上队友经济的影响。指出喷打野会导致线上经济的消减和影响队伍的团结。 ... [详细]
  • 猜字母游戏
    猜字母游戏猜字母游戏——设计数据结构猜字母游戏——设计程序结构猜字母游戏——实现字母生成方法猜字母游戏——实现字母检测方法猜字母游戏——实现主方法1猜字母游戏——设计数据结构1.1 ... [详细]
  • Java学习笔记之面向对象编程(OOP)
    本文介绍了Java学习笔记中的面向对象编程(OOP)内容,包括OOP的三大特性(封装、继承、多态)和五大原则(单一职责原则、开放封闭原则、里式替换原则、依赖倒置原则)。通过学习OOP,可以提高代码复用性、拓展性和安全性。 ... [详细]
  • Java太阳系小游戏分析和源码详解
    本文介绍了一个基于Java的太阳系小游戏的分析和源码详解。通过对面向对象的知识的学习和实践,作者实现了太阳系各行星绕太阳转的效果。文章详细介绍了游戏的设计思路和源码结构,包括工具类、常量、图片加载、面板等。通过这个小游戏的制作,读者可以巩固和应用所学的知识,如类的继承、方法的重载与重写、多态和封装等。 ... [详细]
  • 本文讨论了如何优化解决hdu 1003 java题目的动态规划方法,通过分析加法规则和最大和的性质,提出了一种优化的思路。具体方法是,当从1加到n为负时,即sum(1,n)sum(n,s),可以继续加法计算。同时,还考虑了两种特殊情况:都是负数的情况和有0的情况。最后,通过使用Scanner类来获取输入数据。 ... [详细]
  • 本文介绍了在Java中gt、gtgt、gtgtgt和lt之间的区别。通过解释符号的含义和使用例子,帮助读者理解这些符号在二进制表示和移位操作中的作用。同时,文章还提到了负数的补码表示和移位操作的限制。 ... [详细]
  • C# 7.0 新特性:基于Tuple的“多”返回值方法
    本文介绍了C# 7.0中基于Tuple的“多”返回值方法的使用。通过对C# 6.0及更早版本的做法进行回顾,提出了问题:如何使一个方法可返回多个返回值。然后详细介绍了C# 7.0中使用Tuple的写法,并给出了示例代码。最后,总结了该新特性的优点。 ... [详细]
  • 本文介绍了高校天文共享平台的开发过程中的思考和规划。该平台旨在为高校学生提供天象预报、科普知识、观测活动、图片分享等功能。文章分析了项目的技术栈选择、网站前端布局、业务流程、数据库结构等方面,并总结了项目存在的问题,如前后端未分离、代码混乱等。作者表示希望通过记录和规划,能够理清思路,进一步完善该平台。 ... [详细]
  • 自动轮播,反转播放的ViewPagerAdapter的使用方法和效果展示
    本文介绍了如何使用自动轮播、反转播放的ViewPagerAdapter,并展示了其效果。该ViewPagerAdapter支持无限循环、触摸暂停、切换缩放等功能。同时提供了使用GIF.gif的示例和github地址。通过LoopFragmentPagerAdapter类的getActualCount、getActualItem和getActualPagerTitle方法可以实现自定义的循环效果和标题展示。 ... [详细]
  • 在Xamarin XAML语言中如何在页面级别构建ControlTemplate控件模板
    本文介绍了在Xamarin XAML语言中如何在页面级别构建ControlTemplate控件模板的方法和步骤,包括将ResourceDictionary添加到页面中以及在ResourceDictionary中实现模板的构建。通过本文的阅读,读者可以了解到在Xamarin XAML语言中构建控件模板的具体操作步骤和语法形式。 ... [详细]
author-avatar
闻汝婕环境_259
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有