1500字范文,内容丰富有趣,写作好帮手!
1500字范文 > android 翻译功能开发 Android使用有道翻译API实现翻译功能

android 翻译功能开发 Android使用有道翻译API实现翻译功能

时间:2022-09-28 22:40:21

相关推荐

android 翻译功能开发 Android使用有道翻译API实现翻译功能

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

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

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

获取翻译结果的数据接口为:/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 = "/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() {

}.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);

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。