百度線上翻譯
阿新 • • 發佈:2019-01-06
第一步、註冊後開發者許可權獲取APPID和金鑰
該介面申請引數如下
第二步、獲取使用者輸入的需要翻譯的內容並轉換成介面可以識別的形式
Utils類具體處理方法:private void dealWithField() { String str = edit_query.getText().toString(); if (str != null && str.length() > 0) { q = str; } q = Utils.toUtf8(q); String l = appid + q + salt + key; sign = Utils.encrypt(l); q = Utils.toURLDecoded(q); en = Utils.toURLDecoded(en); zh = Utils.toURLDecoded(zh); }
public class Utils { public static String toURLDecoded(String paramString) { if (paramString == null || paramString.equals("")) { return ""; } try { String str = new String(paramString.getBytes(), "UTF-8"); str = URLDecoder.decode(str, "UTF-8"); return str; } catch (Exception localException) { } return ""; } public static String toUtf8(String str) { String result = null; try { result = new String(str.getBytes("UTF-8"), "UTF-8"); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } return result; } /** * 加密 * @param plaintext 明文 * @return ciphertext 密文 */ public final static String encrypt(String plaintext) { char hexDigits[] = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f' }; try { byte[] btInput = plaintext.getBytes(); // 獲得MD5摘要演算法的 MessageDigest 物件 MessageDigest mdInst = MessageDigest.getInstance("MD5"); // 使用指定的位元組更新摘要 mdInst.update(btInput); // 獲得密文 byte[] md = mdInst.digest(); // 把密文轉換成十六進位制的字串形式 int j = md.length; char str[] = new char[j * 2]; int k = 0; for (int i = 0; i < j; i++) { byte byte0 = md[i]; str[k++] = hexDigits[byte0 >>> 4 & 0xf]; str[k++] = hexDigits[byte0 & 0xf]; } return new String(str); } catch (Exception e) { return null; } } }
第三步、開始識別
網路用的是鴻洋封裝的OKhttp工具庫,解析用的fastjsonOkHttpUtils .get() .url("http://api.fanyi.baidu.com/api/trans/vip/translate") .addParams("q", q) .addParams("from", en) .addParams("to", zh) .addParams("appid", appid) .addParams("salt", salt) .addParams("sign", sign) .build() .execute(new TransCallBack() { @Override public void onError(Call call, Exception e, int id) { Toast.makeText(MainActivity.this, e.getMessage(), Toast.LENGTH_SHORT).show(); } @Override public void onResponse(TransResult response, int id) { tv_result.setText(response.getTrans_result().get(0).getDst()); } });
compile 'com.zhy:okhttputils:2.6.2'
compile 'com.alibaba:fastjson:1.2.34'
結果回撥介面
public abstract class TransCallBack extends Callback<TransResult> {
@Override
public TransResult parseNetworkResponse(Response response, int id) throws Exception {
String s = response.body().string();
TransResult result = JSON.parseObject(s, TransResult.class);
return result;
}
}
注意百度翻譯返回的結果是一個list集合,json如下
{"from":"en","to":"zh","trans_result":[{"src":"apple","dst":"\u82f9\u679c"}]}
json的對應實體類:
public class TransResult {
/**
* from : en
* to : zh
* trans_result : [{"src":"apple","dst":"蘋果"}]
*/
private String from;
private String to;
private List<TransResultBean> trans_result;
public String getFrom() {
return from;
}
public void setFrom(String from) {
this.from = from;
}
public String getTo() {
return to;
}
public void setTo(String to) {
this.to = to;
}
public List<TransResultBean> getTrans_result() {
return trans_result;
}
public void setTrans_result(List<TransResultBean> trans_result) {
this.trans_result = trans_result;
}
public static class TransResultBean {
/**
* src : apple
* dst : 蘋果
*/
private String src;
private String dst;
public String getSrc() {
return src;
}
public void setSrc(String src) {
this.src = src;
}
public String getDst() {
return dst;
}
public void setDst(String dst) {
this.dst = dst;
}
}
}
說到json實體類,Android studio有一個非常便捷的實體類生成外掛“GsonFormat”
下載安裝,重啟as,然後新建一個Javabean類
使用Alt+Insert或者Alt+s快捷鍵,將返回的json內容完整的貼上進去
點選OK生成一個完好的Javabean類
注意fastjson對格式要求很高,出現了不符合標準的屬性名可用以下方法轉化
@JSONField(name = "total_join_user")
private int userCount;