博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Android进阶2之有道词典开发
阅读量:4105 次
发布时间:2019-05-25

本文共 6231 字,大约阅读时间需要 20 分钟。

本博文只是实现有道词典的功能,并着重界面。

首先,你需要获取有道开发平台的API key。 申请一个吧。

利用数据接口获取数据:

http://fanyi.youdao.com/openapi.do?keyfrom=
&key=
&type=data&doctype=
&version=1.1&q=要翻译的文本

版本:1.1,请求方式:get,编码方式:utf-8

主要功能:中英互译,同时获得有道翻译结果和有道词典结果(可能没有)

参数说明:

 type - 返回结果的类型,固定为data

 doctype - 返回结果的数据格式,xml或json或jsonp

 version - 版本,当前最新版本为1.1

 q - 要翻译的文本,不能超过200个字符,需要使用utf-8编码

errorCode:

 0 - 正常

 20 - 要翻译的文本过长

 30 - 无法进行有效的翻译

 40 - 不支持的语言类型

 50 - 无效的key

返回的样本:

json数据格式举例

http://fanyi.youdao.com/openapi.do?keyfrom=
&key=
&type=data&doctype=json&version=1.1&q=翻译{ "errorCode":0 "query":"翻译", "translation":["translation"], // 有道翻译 "basic":{ // 有道词典-基本词典 "phonetic":"fān yì", "explains":[ "translate", "interpret" ] }, "web":[ // 有道词典-网络释义 { "key":"翻译", "value":["translator","translation","translate","Interpreter"] }, {...} ]}

xml数据格式举例

http://fanyi.youdao.com/openapi.do?keyfrom=
&key=
&type=data&doctype=xml&version=1.1&q=这里是有道翻译API
0

jsonp数据格式举例

http://fanyi.youdao.com/openapi.do?keyfrom=
&key=
&type=data&doctype=jsonp&callback=show&version=1.1&q=APIshow({ "errorCode":0 "query":"API", "translation":["API"], // 有道翻译 "basic":{ // 有道词典-基本词典 "explains":[ "abbr. 应用程序界面(Application Program Interface);..." ] }, "web":[ // 有道词典-网络释义 { "key":"API", "value":["应用程序接口(Application Programming Interface)","应用编程接口","应用程序编程接口","美国石油协会"] }, {...} ]});
具体实现:

package xiaosi.youdao;import org.apache.http.HttpResponse;import org.apache.http.client.methods.HttpGet;import org.apache.http.impl.client.DefaultHttpClient;import org.apache.http.util.EntityUtils;import org.json.JSONArray;import org.json.JSONObject;import android.app.Activity;import android.os.Bundle;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;import android.widget.EditText;import android.widget.TextView;import android.widget.Toast;public class YoudaoActivity extends Activity{	private EditText	edit				= null;	private Button		search				= null;	private TextView	text				= null;	private String		YouDaoBaseUrl		= "http://fanyi.youdao.com/openapi.do";	private String		YouDaoKeyFrom		= "MyLifes";	private String		YouDaoKey			= "你申请的API Key";	private String		YouDaoType			= "data";	private String		YouDaoDoctype		= "json";	private String		YouDaoVersion		= "1.1";	@Override	public void onCreate(Bundle savedInstanceState)	{		super.onCreate(savedInstanceState);		setContentView(R.layout.main);		init();	}	private void init()	{		edit = (EditText) findViewById(R.id.edit);		search = (Button) findViewById(R.id.search);		search.setOnClickListener(new searchListener());		text = (TextView) findViewById(R.id.text);	}	private class searchListener implements OnClickListener	{		@Override		public void onClick(View v)		{			String YouDaoSearchContent = edit.getText().toString().trim();			String YouDaoUrl = YouDaoBaseUrl+"?keyfrom=" + YouDaoKeyFrom + "&key=" + YouDaoKey + "&type=" + YouDaoType + "&doctype="					+ YouDaoDoctype + "&type=" + YouDaoType + "&version=" + YouDaoVersion + "&q=" + YouDaoSearchContent;			try			{				AnalyzingOfJson(YouDaoUrl);			}			catch (Exception e)			{				e.printStackTrace();			}		}	}	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"))					{						Toast.makeText(getApplicationContext(), "要翻译的文本过长", Toast.LENGTH_SHORT);					}					else if (errorCode.equals("30 "))					{						Toast.makeText(getApplicationContext(), "无法进行有效的翻译", Toast.LENGTH_SHORT);					}					else if (errorCode.equals("40"))					{						Toast.makeText(getApplicationContext(), "不支持的语言类型", Toast.LENGTH_SHORT);					}					else if (errorCode.equals("50"))					{						Toast.makeText(getApplicationContext(), "无效的key", Toast.LENGTH_SHORT);					}					else					{						// 要翻译的内容						String query = jsonObject.getString("query");						message = query;						// 翻译内容						String translation = jsonObject.getString("translation");						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("phonetic"))							{								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\t<"+(count+1)+">" + key;								}								if (webArray.getJSONObject(count).has("value"))								{									String value = webArray.getJSONObject(count).getString("value");									message += "\n\t   " + value;								}								count++;							}						}					}				}			}			text.setText(message);		}		else		{			Toast.makeText(getApplicationContext(), "提取异常", Toast.LENGTH_SHORT);		}	}}
main.xml

转载地址:http://bldsi.baihongyu.com/

你可能感兴趣的文章
细说 CA 和证书
查看>>
手把手教你逆向分析 Android 程序
查看>>
Sublime Text (3) for PHP Developers
查看>>
Sublime Text 3 绝对神器
查看>>
Git push与pull的默认行为
查看>>
自动化发布-GitLab WEB Hooks 配置
查看>>
Android性能优化实战前篇
查看>>
微信网页第三方登录原理
查看>>
使用Sublime Text3+Ctags+Cscope替代Source Insight
查看>>
git reset revert 回退回滚取消提交返回上一版本
查看>>
Android Studio插件整理
查看>>
微信开放平台开发——网页微信扫码登录(OAuth2.0)
查看>>
PHP微信第三方扫码登录技术问题
查看>>
C++11带来的优雅语法
查看>>
CentOS7 安装 KVM
查看>>
CentOS 7 下配置KVM
查看>>
CentOS 7 清除旧内核
查看>>
CentOS 7 使用阿里云的yum源
查看>>
php-fpm的配置和优化
查看>>
php-fpm 与 Nginx优化总结
查看>>