android进阶2之有道词典开发,Android进阶2之有道词典开发

0818b9ca8b590ca3270a3433284dd417.png

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

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

0818b9ca8b590ca3270a3433284dd417.png

利用数据接口获取数据:

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=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 EditTextedit= null;

private Buttοnsearch= null;

private TextViewtext= null;

private StringYouDaoBaseUrl= "http://fanyi.youdao.com/openapi.do";

private StringYouDaoKeyFrom= "MyLifes";

private StringYouDaoKey= "你申请的API Key";

private StringYouDaoType= "data";

private StringYouDaoDoctype= "json";

private StringYouDaoVersion= "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" + 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

android:layout_width="fill_parent"

android:layout_height="fill_parent"

android:orientation="vertical"

android:background="@drawable/a">

android:id="@+id/edit"

android:layout_width="fill_parent"

android:layout_height="wrap_content"

android:hint="输入你要查询的内容......" />

android:id="@+id/search"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:hint="查询" />

android:layout_width="fill_parent"

android:layout_height="wrap_content"

android:scrollbars="none" >

android:id="@+id/text"

android:layout_width="fill_parent"

android:layout_height="wrap_content"

android:textColor="#000000"/>

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值