Android进阶2之有道词典开发

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

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



利用数据接口获取数据:

http://fanyi.youdao.com/openapi.do?keyfrom=<keyfrom>&key=<key>&type=data&doctype=<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=<keyfrom>&key=<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=<keyfrom>&key=<key>&type=data&doctype=xml&version=1.1&q=这里是有道翻译API <?xml version="1.0" encoding="UTF-8"?> <youdao-fanyi> <errorCode>0</errorCode> <!-- 有道翻译 --> <query><![CDATA[这里是有道翻译API]]></query> <translation> <paragraph><![CDATA[Here is the youdao translation API]]></paragraph> </translation> </youdao-fanyi>

jsonp数据格式举例

http://fanyi.youdao.com/openapi.do?keyfrom=<keyfrom>&key=<key>&type=data&doctype=jsonp&callback=show&version=1.1&q=API show({ "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

<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" android:background="@drawable/a"> <EditText android:id="@+id/edit" android:layout_width="fill_parent" android:layout_height="wrap_content" android:hint="输入你要查询的内容......" /> <Button android:id="@+id/search" android:layout_width="wrap_content" android:layout_height="wrap_content" android:hint="查询" /> <ScrollView android:layout_width="fill_parent" android:layout_height="wrap_content" android:scrollbars="none" > <TextView android:id="@+id/text" android:layout_width="fill_parent" android:layout_height="wrap_content" android:textColor="#000000"/> </ScrollView> </LinearLayout>





  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值