Android中调用百度翻译Demo

官网:
http://api.fanyi.baidu.com/api/trans/product/apidoc
Demo下载地址:
https://gitee.com/olleh/MyTranslate.git

MainActivity

package com.example.zhangyu.mytranslate;import android.os.Bundle;
import android.os.Handler;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;import com.example.zhangyu.mytranslate.BaiduTranslate.TransApi;
import com.example.zhangyu.mytranslate.BaiduTranslate.TranslateResult;
import com.google.gson.Gson;import java.util.List;public class MainActivity extends AppCompatActivity {private Button button;private TextView textView;private Handler handler = new Handler();private EditText editText;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);initView();}private void initView() {editText = (EditText) findViewById(R.id.editText);button = (Button) findViewById(R.id.button);textView = (TextView) findViewById(R.id.textView);button.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {final String query =editText.getText().toString();
//                final String query = "我爱你\n你爱我吗";new Thread(new Runnable() {@Overridepublic void run() {String resultJson = new TransApi().getTransResult(query, "auto", "en");//拿到结果,对结果进行解析。Gson gson = new Gson();TranslateResult translateResult = gson.fromJson(resultJson, TranslateResult.class);final List<TranslateResult.TransResultBean> trans_result = translateResult.getTrans_result();handler.post(new Runnable() {@Overridepublic void run() {String dst = "";for (TranslateResult.TransResultBean s : trans_result) {dst = dst + "\n" + s.getDst();}textView.setText(dst);}});}}).start();}});}
}

TransApi

package com.example.zhangyu.mytranslate.BaiduTranslate;import java.util.HashMap;
import java.util.Map;public class TransApi {private static final String TRANS_API_HOST = "http://api.fanyi.baidu.com/api/trans/vip/translate";/*自己的id*/private static final String APP_ID = "20181125000238839";private static final String SECURITY_KEY = "YJc1SJxDR92myrQTjH_T";private String appid;private String securityKey;public TransApi() {this.appid = APP_ID;this.securityKey = SECURITY_KEY;}public TransApi(String appid, String securityKey) {this.appid = appid;this.securityKey = securityKey;}public String getTransResult(String query, String from, String to) {Map<String, String> params = buildParams(query, from, to);return HttpGet.get(TRANS_API_HOST, params);}private Map<String, String> buildParams(String query, String from, String to) {Map<String, String> params = new HashMap<String, String>();params.put("q", query);params.put("from", from);params.put("to", to);params.put("appid", appid);// 随机数String salt = String.valueOf(System.currentTimeMillis());params.put("salt", salt);// 签名String src = appid + query + salt + securityKey; // 加密前的原文params.put("sign", MD5.md5(src));return params;}}

HttpGet

package com.example.zhangyu.mytranslate.BaiduTranslate;import java.io.BufferedReader;
import java.io.Closeable;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.UnsupportedEncodingException;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLEncoder;
import java.security.KeyManagementException;
import java.security.NoSuchAlgorithmException;
import java.security.cert.CertificateException;
import java.security.cert.X509Certificate;
import java.util.Map;import javax.net.ssl.HttpsURLConnection;
import javax.net.ssl.SSLContext;
import javax.net.ssl.TrustManager;
import javax.net.ssl.X509TrustManager;class HttpGet {protected static final int SOCKET_TIMEOUT = 10000; // 10Sprotected static final String GET = "GET";public static String get(String host, Map<String, String> params) {try {// 设置SSLContextSSLContext sslcontext = SSLContext.getInstance("TLS");sslcontext.init(null, new TrustManager[] { myX509TrustManager }, null);String sendUrl = getUrlWithQueryString(host, params);// System.out.println("URL:" + sendUrl);URL uri = new URL(sendUrl); // 创建URL对象HttpURLConnection conn = (HttpURLConnection) uri.openConnection();if (conn instanceof HttpsURLConnection) {((HttpsURLConnection) conn).setSSLSocketFactory(sslcontext.getSocketFactory());}conn.setConnectTimeout(SOCKET_TIMEOUT); // 设置相应超时conn.setRequestMethod(GET);int statusCode = conn.getResponseCode();if (statusCode != HttpURLConnection.HTTP_OK) {System.out.println("Http错误码:" + statusCode);}// 读取服务器的数据InputStream is = conn.getInputStream();BufferedReader br = new BufferedReader(new InputStreamReader(is));StringBuilder builder = new StringBuilder();String line = null;while ((line = br.readLine()) != null) {builder.append(line);}String text = builder.toString();close(br); // 关闭数据流close(is); // 关闭数据流conn.disconnect(); // 断开连接return text;} catch (MalformedURLException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();} catch (KeyManagementException e) {e.printStackTrace();} catch (NoSuchAlgorithmException e) {e.printStackTrace();}return null;}public static String getUrlWithQueryString(String url, Map<String, String> params) {if (params == null) {return url;}StringBuilder builder = new StringBuilder(url);if (url.contains("?")) {builder.append("&");} else {builder.append("?");}int i = 0;for (String key : params.keySet()) {String value = params.get(key);if (value == null) { // 过滤空的keycontinue;}if (i != 0) {builder.append('&');}builder.append(key);builder.append('=');builder.append(encode(value));i++;}return builder.toString();}protected static void close(Closeable closeable) {if (closeable != null) {try {closeable.close();} catch (IOException e) {e.printStackTrace();}}}/*** 对输入的字符串进行URL编码, 即转换为%20这种形式* * @param input 原文* @return URL编码. 如果编码失败, 则返回原文*/public static String encode(String input) {if (input == null) {return "";}try {return URLEncoder.encode(input, "utf-8");} catch (UnsupportedEncodingException e) {e.printStackTrace();}return input;}private static TrustManager myX509TrustManager = new X509TrustManager() {@Overridepublic X509Certificate[] getAcceptedIssuers() {return null;}@Overridepublic void checkServerTrusted(X509Certificate[] chain, String authType) throws CertificateException {}@Overridepublic void checkClientTrusted(X509Certificate[] chain, String authType) throws CertificateException {}};}

MD5

package com.example.zhangyu.mytranslate.BaiduTranslate;import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.io.UnsupportedEncodingException;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;/*** MD5编码相关的类* * @author * */
public class MD5 {// 首先初始化一个字符数组,用来存放每个16进制字符private static final char[] hexDigits = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd','e', 'f' };/*** 获得一个字符串的MD5值* * @param input 输入的字符串* @return 输入字符串的MD5值* */public static String md5(String input) {if (input == null)return null;try {// 拿到一个MD5转换器(如果想要SHA1参数换成”SHA1”)MessageDigest messageDigest = MessageDigest.getInstance("MD5");// 输入的字符串转换成字节数组byte[] inputByteArray = null;try {inputByteArray = input.getBytes("utf-8");} catch (UnsupportedEncodingException e) {// TODO Auto-generated catch blocke.printStackTrace();}// inputByteArray是输入字符串转换得到的字节数组messageDigest.update(inputByteArray);// 转换并返回结果,也是字节数组,包含16个元素byte[] resultByteArray = messageDigest.digest();// 字符数组转换成字符串返回return byteArrayToHex(resultByteArray);} catch (NoSuchAlgorithmException e) {return null;}}/*** 获取文件的MD5值* * @param file* @return*/public static String md5(File file) {try {if (!file.isFile()) {System.err.println("文件" + file.getAbsolutePath() + "不存在或者不是文件");return null;}FileInputStream in = new FileInputStream(file);String result = md5(in);in.close();return result;} catch (FileNotFoundException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}return null;}public static String md5(InputStream in) {try {MessageDigest messagedigest = MessageDigest.getInstance("MD5");byte[] buffer = new byte[1024];int read = 0;while ((read = in.read(buffer)) != -1) {messagedigest.update(buffer, 0, read);}in.close();String result = byteArrayToHex(messagedigest.digest());return result;} catch (NoSuchAlgorithmException e) {e.printStackTrace();} catch (FileNotFoundException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}return null;}private static String byteArrayToHex(byte[] byteArray) {// new一个字符数组,这个就是用来组成结果字符串的(解释一下:一个byte是八位二进制,也就是2位十六进制字符(2的8次方等于16的2次方))char[] resultCharArray = new char[byteArray.length * 2];// 遍历字节数组,通过位运算(位运算效率高),转换成字符放到字符数组中去int index = 0;for (byte b : byteArray) {resultCharArray[index++] = hexDigits[b >>> 4 & 0xf];resultCharArray[index++] = hexDigits[b & 0xf];}// 字符数组组合成字符串返回return new String(resultCharArray);}}

TranslateResult

package com.example.zhangyu.mytranslate.BaiduTranslate;import java.util.List;public class TranslateResult {/*** from : zh* to : en* trans_result : [{"src":"null要就找一个让你衣食无忧的人","dst":"Null wants to find someone who will make you comfortable with food and clothing"},{"src":"要么就找一个爱你爱到骨子里的","dst":"Or find someone who loves you to the bone."},{"src":"要么就一个人","dst":"Or just one person."},{"src":"不然为什么要谈恋爱","dst":"Otherwise why to fall in love?"},{"src":"是酒不好喝","dst":"It's a bad wine."},{"src":"还是手机不好玩","dst":"Or mobile phones are not fun"}]*/private String from;private String to;private List<TransResultBean> trans_result;@Overridepublic String toString() {return "TranslateResult{" +"from='" + from + '\'' +", to='" + to + '\'' +", trans_result=" + 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 : null要就找一个让你衣食无忧的人* dst : Null wants to find someone who will make you comfortable with food and clothing*/private String src;private String dst;@Overridepublic String toString() {return "TransResultBean{" +"src='" + src + '\'' +", dst='" + 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;}}
}

Android中调用百度翻译Demo相关推荐

  1. 微信小程序中调用百度翻译API(出现的错误54001 52003)

    我自己的54001: appid 和key出现错误, 先用的是百度提供的模板appid 及key 然后一直报错  之后用其它的appid 和key后能够正常运行 52003:这个需要自己申请一个app ...

  2. android demo 调用,Android中调用C++函数的一个简单Demo

    这里我不想多解释什么,对于什么JNI和NDK的相关内容大家自己去百度或谷歌.我对Android的学习也只是个新手 .废话少说直接进入正题. 一.在Eclipse中创建一个Android Applica ...

  3. python调用百度翻译-Python 调用百度翻译API

    由于实习公司这边做的是日文app,有时要看看用户反馈,对于我这种五十音图都没记住的人,表示百度翻译确实还可以.但不想每次都复制粘贴啊,google被墙也是挺蛋疼的事,所以用python结合baidu ...

  4. 基于调用百度翻译API的简易翻译器(python)

    基于调用百度翻译API的简易翻译器 一.使用自己的百度账号登录百度翻译开放平台获取百度翻译API 使用您的百度账号登录百度翻译开放平台(http://api.fanyi.baidu.com): 注册成 ...

  5. python百度翻译api申请网页版_python3调用百度翻译api接口实现全过程

    现在很都平台的翻译api接口都开始收费了,比如谷歌.微软.yandex等等,注册非常麻烦,而且要钱,目前就百度还剩下一个最基础的翻译api不需要钱,今天我要和大家分享的是怎样使用python3调用百度 ...

  6. Android Studio调用百度地图(二):实现地图显示后台定位和步行导航

    先看一下运行效果: 实现功能:后台定位+步行导航(可通过长按屏幕自定义终点,起点为定位点) 后台定位即当程序在后台时依旧执行定位功能,步行导航支持30米-50千米范围内的导航 一 导入SDK并配置相关 ...

  7. requests基操/爬取调用百度翻译

    因为最近使用pandas 和numpy,所以就研究下requests库,毕竟这是目前python最流行的http请求库,也是最符合pythonic的库,有时间也准备看源码学习下,不过前一阵看到一个ht ...

  8. 【2019-07-23】]python3 把日语翻译为中文 调用百度翻译API接口及API申请使用教程

    点击申请百度翻译API,得到一个你自己的API账户. 点击查看申请教程,感谢教程原作者. API官网提供了一个python2的使用接口的demo还有详细的解释文档 想用python3完成,代码几乎照搬 ...

  9. Python3调用百度翻译API进行英文翻译

    一.API的概念 API(Application Programming Interface,应用程序编程接口)是一些预先定义的函数,目的是提供应用程序与开发人员基于某软件或硬件得以访问一组例程的能力 ...

  10. java 调用百度翻译接口

    md5加密类  百度翻译Demo有 package com.jddz.meta.util;import java.io.File; import java.io.FileInputStream; im ...

最新文章

  1. Linux命令:tar命令批量解压方法总结
  2. SpringCloud Config简介
  3. OpenGL Overdraw Count透支数的实例
  4. 阿里开源的15个顶级Java项目!!!
  5. Shiro框架原理及应用分析
  6. 服務端的EIT造形+Socket代碼
  7. Silevo需征收进口关税?美光伏巨头各执一词
  8. 视频帧率对人眼主观感受的影响 2
  9. 用gambit学博弈论--完全信息动态博弈(一)
  10. php微信公众号登录
  11. IBM Watson启示录:AI不应该仅仅是炫技
  12. spss之数据预处理
  13. 心理学-墨菲定律 个人笔记
  14. python怎样分析文献综述_怎么写文献综述?
  15. 190320运算符数据类型
  16. Web端与移动端接入萤石云平台的视频数据
  17. 机器学习第三课--LWR的疑惑与想法
  18. VisionPro FixtureCoord工具解释
  19. python 组合数字和字符_python无限生成不重复(字母,数字,字符)组合的方法
  20. 客户端时不时接收到10054错误

热门文章

  1. 研发团队管理--向下沟通
  2. Linux服务器下安装ANSYS
  3. Django实战教程: 开发企业级应用智能文档管理系统smartdoc(1)
  4. 竹子的精神高山流水,赞美竹子的句子,竹子散文
  5. CAP--什么是CAP,为何三者不可兼得
  6. 中国水墨风的小学学校网站模板
  7. 数学速算法_孩子数学计算老出错?复习阶段,家长赶紧和孩子一起找准原因!...
  8. 用CSS动画制作一个正方体
  9. 【Keras】使用 TPU 训练 TensorFlow 模型
  10. java给word表格追加行_Java 使用Spire.Cloud.Word给Word文档添加表格