第一次寫簡書文章漠魏,不足之處下方評(píng)論處請(qǐng)?zhí)岢觯x謝
百度翻譯開放平臺(tái)
點(diǎn)擊鏈接他去,右上角登錄/注冊(cè)毙驯,認(rèn)證為個(gè)人開發(fā)者,選擇通用翻譯灾测,然后
立即使用
點(diǎn)擊立即使用爆价,然后
點(diǎn)擊文檔與支持,左側(cè)通用翻譯API技術(shù)文檔,查看接口信息
請(qǐng)求字段
網(wǎng)絡(luò)請(qǐng)求返回的字段
例子:
將apple從英文翻譯成中文:
請(qǐng)求參數(shù):
q=apple
from=en
to=zh
appid=2015063000000001(在管理控制臺(tái)左面的開發(fā)者信息里查看)
salt=1435660288(任意值)
平臺(tái)分配的密鑰: 12345678?(在管理控制臺(tái)左面的開發(fā)者信息里查看)
生成sign:
拼接字符串1拼接:
appid+q+sal+密鑰=2015063000000001apple143566028812345678
計(jì)算簽名sign(對(duì)字符串1做md5加密媳搪,注意計(jì)算md5之前铭段,串1必須為UTF-8編碼)sign=md5(2015063000000001apple143566028812345678)sign
? ? ? ?=f89f9594663708c1605f3d736d01d2d4
完整請(qǐng)求為:http://api.fanyi.baidu.com/api/trans/vip/translate?q=apple&from=en&to=zh&appid=2015063000000001&salt=1435660288&sign=f89f9594663708c1605f3d736d01d2d4
也可以使用POST方法傳送需要的參數(shù)。
MD5加密方法
private static String md5(String string) {
if (TextUtils.isEmpty(string))
? ? ? ? ? ?return "";
MessageDigest md5 = null;
try {
? ? ? ? ? ? ?md5 = MessageDigest.getInstance("MD5");
? ? ? ? ? ? ?byte[] bytes = md5.digest(string.getBytes());
? ? ? ? ? ? ?String result = "";
? ? ? ? ? ? ?for (byte b : bytes) {
? ? ? ? ? ? ? ? ? ? ? String temp = Integer.toHexString(b & 0xff);
? ? ? ? ? ? ? ? ? ? ? ?if (temp.length() == 1) {
? ? ? ? ? ? ? ? ? ? ? ? ? ? ?temp = "0" + temp;
}
? ? ? ? ? ? result += temp;
}
? ? ? ?return result;
} catch (Exception e) {
? ? ? e.printStackTrace();
}
? ? ?return "";
}
語言列表和錯(cuò)誤碼列表我就不貼了秦爆,有興趣自己看看
下面開始在Android Studio上寫代碼
1.添加依賴
as自帶的okhttp版本有點(diǎn)老序愚,所以自己導(dǎo)入下好的okhttp包,還有okio包等限,一起使用爸吮,我們這里使用的是Gson解析json,所以添加Gson依賴
拷貝到libs文件夾下精刷,右鍵選擇as a library
注意依賴是否缺少
2.AndroidManifest.xml添加網(wǎng)絡(luò)權(quán)限
3.代碼
javabean類:Translate.class使用GsonFormat生成
public class Translate {
/**
* from : en
* to : zh
* trans_result : [{"src":"apple","dst":"蘋果"}]
*/
private String from;
private String to;
/**
* src : apple
* dst : 蘋果
*/
private List?trans_result;
public void setFrom(String from) {
this.from = from;
}
public void setTo(String to){
this.to = to;
}
public void setTrans_result(List?trans_result) {
this.trans_result = trans_result;
}
public String getFrom() {
return from;
} public String getTo() {
return to;
}
public List?getTrans_result() {
return trans_result;
}
public static class TransResultEntity {
private String src;
private String dst;
public void setSrc(String src) {
this.src = src;
}
public void setDst(String dst) {
this.dst = dst;
}
public String getSrc() {
return src;
}
public String getDst() {
return dst;
}
}
}
布局activity_main.xml
textview拗胜,editview,button
MainActivity.class
public class MainActivity extends AppCompatActivity {
private EditText mEditText; //輸入框
private TextView mTextView怒允;//用來顯示查詢結(jié)果
String json; //返回的json串
private static final String url = "http://api.fanyi.baidu.com/api/trans/vip/translate"; ?//網(wǎng)絡(luò)請(qǐng)求的url
private static final String APP_ID_STRING = "20180407000143709"; ?//自己的appid
private static final String SALT_STRING = "1435660288"; ?//隨機(jī)數(shù)可以隨便設(shè)置
private static final String SECRET_STRING = "LXCjF_t1j9qOgwgzu95B"; //自己的密鑰
private String SIGN_STRING;//簽名埂软,md5加密
private String string;//拼接需要md5加密的字符串
//創(chuàng)建okhttp對(duì)象,設(shè)置超時(shí)
private OkHttpClient mOkHttpClient = new OkHttpClient
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? .Builder()
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?.connectTimeout(5000, TimeUnit.SECONDS)
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?.build();
//handle來通知主線程處理UI更新
private Handler mHandler = new Handler() {
? ? ? @Override
? ?public void handleMessage(Message msg) {
? ? ? ? ?super.handleMessage(msg);
? ? ? ? ?mTextView.setText(msg.getData().getString("translate"));
}
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mEditText = (EditText) findViewById(R.id.editText_translate);
mTextView = (TextView) findViewById(R.id.textView_show); findViewById(R.id.button_translate).setOnClickListener(new View.OnClickListener() { @Override
public void onClick(View v) {
? ? ? Request_Get();
}
});
}
private void Request_Get() {
//拼接需要md5加密的字符串
string = APP_ID_STRING + mEditText.getText().toString()+SALT_STRING+SECRET_STRING;
SIGN_STRING = md5(string);//把字符串轉(zhuǎn)為md5
//用formbody來添加字段
FormBody body = new FormBody
? ? ? ? ? ? ? ? ? ? ? .Builder()
? ? ? ? ? ? ? ? ? ? ?.add("from", "en")
? ? ? ? ? ? ? ? ? ? ?.add("to", "zh")
? ? ? ? ? ? ? ? ? ? ?.add("q", mEditText.getText().toString())
? ? ? ? ? ? ? ? ? ? ?.add("appid", APP_ID_STRING)
? ? ? ? ? ? ? ? ? ? .add("salt", SALT_STRING)
? ? ? ? ? ? ? ? ? ? .add("sign", SIGN_STRING)
? ? ? ? ? ? ? ? ? ? .build();
//創(chuàng)建Request對(duì)象
Request request = new Request
? ? ? ? ? ? ? ? ? ? ? ? .Builder()
? ? ? ? ? ? ? ? ? ? ? ? .post(body) //post請(qǐng)求
? ? ? ? ? ? ? ? ? ? ? ? .url(url)
? ? ? ? ? ? ? ? ? ? ? ? ?.build();
//創(chuàng)建call對(duì)象,開始異步網(wǎng)絡(luò)請(qǐng)求
Call call = mOkHttpClient.newCall(request);
call.enqueue(new Callback() {
@Override
public void onFailure(Call call, IOException e) {
Toast.makeText(MainActivity.this, "請(qǐng)求失敗", Toast.LENGTH_LONG).show();
}
@Override public void onResponse(Call call, Response response) throws IOException {
//返回的結(jié)果為json
json = response.body().string();
//開線程
new Thread() {
@Override
public void run() {
super.run();
//創(chuàng)建javabean對(duì)象實(shí)例
Translate mTranslate = new Translate();
//創(chuàng)建gson對(duì)象實(shí)例
Gson gson = new Gson();
//開始解析json
mTranslate = gson.fromJson(json, Translate.class);
//使用message和bundle來傳遞信息
Message msg = Message.obtain();
Bundle b = new Bundle();
b.putString("translate", mTranslate.getTrans_result().get(0).getDst() + "");
msg.setData(b);
//交給handler處理
mHandler.sendMessage(msg);
}
}.start();
}
});
}
private static String md5(String string) {
if (TextUtils.isEmpty(string))
return "";
MessageDigest md5 = null;
try {
md5 = MessageDigest.getInstance("MD5");
byte[] bytes = md5.digest(string.getBytes());
String result = "";
for (byte b : bytes) {
String temp = Integer.toHexString(b & 0xff);
if (temp.length() == 1) {
temp = "0" + temp;
}
result += temp;
} return result;
} catch (Exception e) {
e.printStackTrace();
} return "";
}
}