Android-Retrofit-2.0-Post与Get-请求有道词典翻译
Retrofit-2.0版本后,内置已经集成了OKHttp,在使用Retrofit的时候 看似是Retrofit去网络请求的 实际上Retrofit只是封装,所以不要以为Retrofit是网络请求框架,Retrofit是网络封装框架,封装网络请求接口,封装解析等操作, 真正请求还是交给了OKHttp
代码结构:

第一步:在app/build.gradle添加支持库:

dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
/*implementation"org.jetbrains.kotlin:kotlin-stdlib-jre7:$kotlin_version"
implementation 'com.android.support:appcompat-v7:28.0.0'
implementation 'com.android.support.constraint:constraint-layout:1.1.3'
testImplementation 'junit:junit:4.12'
androidTestImplementation 'com.android.support.test:runner:1.0.2'
androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'*/
implementation 'com.squareup.retrofit2:converter-gson:2.0.2' // 用Gson解析json的转换器
implementation 'com.android.support:appcompat-v7:28.0.0'
// Retrofit库
implementation 'com.squareup.retrofit2:retrofit:2.0.2'
// Okhttp库
// compile 'com.squareup.okhttp3:okhttp:3.1.2'
}
第二步:封装服务器响应后的Bean实体:
2.1)封装POST响应后的Bean实体>>PostTranslation
package ldl.cn.ldldemo.post;
import java.util.List;
public class PostTranslation {
/**
* 以下这些字段为什么要这样写,是由于服务器规定的,内部Gson解析的时候会对应字段的,所以必须这样写
*/
private String type;
private int errorCode;
private int elapsedTime;
private List<List<TranslateResultBean>> translateResult;
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
public int getErrorCode() {
return errorCode;
}
public void setErrorCode(int errorCode) {
this.errorCode = errorCode;
}
public int getElapsedTime() {
return elapsedTime;
}
public void setElapsedTime(int elapsedTime) {
this.elapsedTime = elapsedTime;
}
public List<List<TranslateResultBean>> getTranslateResult() {
return translateResult;
}
public void setTranslateResult(List<List<TranslateResultBean>> translateResult) {
this.translateResult = translateResult;
}
/**
* 定义结果Bean
*/
public static class TranslateResultBean {
/**
* src = xue
* tgt = sb
*/
private String src;
private String tgt;
public String getSrc() {
return src;
}
public void setSrc(String src) {
this.src = src;
}
public String getTgt() {
return tgt;
}
public void setTgt(String tgt) {
this.tgt = tgt;
}
}
}
2.2)封装GET响应后的Bean实体>>GetTranslation
package ldl.cn.ldldemo.get;
public class GetTranslation {
/**
* 以下这些字段为什么要这样写,是由于服务器规定的,内部Gson解析的时候会对应字段的,所以必须这样写
*/
private int status;
public content content;
private static class content {
private String from;
private String to;
private String vendor;
private String out;
private int errNo;
/***
* ------------- 新增toString(); 为了看日志
*/
@Override
public String toString() {
return "content{" +
"from='" + from + '\'' +
", to='" + to + '\'' +
", vendor='" + vendor + '\'' +
", out='" + out + '\'' +
", errNo=" + errNo +
'}';
}
}
/***
* ------------- 新增toString(); 为了看日志
*/
@Override
public String toString() {
return "GetTranslation{" +
"status=" + status +
", content=" + content +
'}' + "\n static class content的toString():" + content.toString();
}
}
第三步:描述请求的接口Interface
3.1:描述POST请求的接口 IRequest
package ldl.cn.ldldemo.post; import retrofit2.Call;
import retrofit2.http.Field;
import retrofit2.http.FormUrlEncoded;
import retrofit2.http.POST; public interface IRequest { @POST("translate?doctype=json&jsonversion=&type=&keyfrom=&model=&mid=&imei=&vendor=&screen=&ssid=&network=&abtest=")
@FormUrlEncoded
Call<PostTranslation> getCall(@Field("i") String targetSentence);
//采用@Post表示Post方法进行请求(传入部分url地址)
// 采用@FormUrlEncoded注解的原因:API规定采用请求格式x-www-form-urlencoded,即表单形式
// 需要配合@Field使用 }
3.2:描述GET请求的接口 IGetRequest
package ldl.cn.ldldemo.get; import retrofit2.Call;
import retrofit2.http.GET; /**
* 请求接口
*/
public interface IGetRequest { @GET("ajax.php?a=fy&f=auto&t=auto&w=hello%20world")
Call<GetTranslation> getCall();
// 注解里传入 网络请求 的部分URL地址
// getCall()是接受网络请求数据的方法
}
第四步:具体Post、Get 操作:
package ldl.cn.ldldemo; import android.app.Activity;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.util.Log;
import android.view.View; import ldl.cn.ldldemo.get.GetTranslation;
import ldl.cn.ldldemo.get.IGetRequest;
import ldl.cn.ldldemo.post.IRequest;
import ldl.cn.ldldemo.post.PostTranslation;
import retrofit2.Call;
import retrofit2.Callback;
import retrofit2.Response;
import retrofit2.Retrofit;
import retrofit2.converter.gson.GsonConverterFactory; public class MainActivity extends Activity { @Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); init();
} private void init() { } /**
* POST-请求的方式
* @param view
*/
public void startPostRequest(View view) { /**
* 创建Retrofit对象
*/
Retrofit retrofit = new Retrofit.Builder()
.baseUrl("http://fanyi.youdao.com/") // 在这里设置网络访问的URL
.addConverterFactory(GsonConverterFactory.create()) // 在这里设置
.build(); /**
* 创建网络请求接口
*/
IRequest iRequest = retrofit.create(IRequest.class);
Call<PostTranslation> call = iRequest.getCall("study");
call.enqueue(new Callback<PostTranslation>() { @Override
public void onResponse(Call<PostTranslation> call, Response<PostTranslation> response) {
// 代表请求成功
Log.d("@@@@@@", "翻译的结果是:" + response.body().getTranslateResult().get(0).get(0).getTgt());
} @Override
public void onFailure(Call<PostTranslation> call, Throwable t) {
// 代表请求失败
Log.d("@@@@@@", "请求失败:" + t.getMessage());
}
}); } /**
* GET-请求的方式
* @param view
*/
public void startGetRequest(View view) {
/**
* 创建Retrofit
*/
Retrofit retrofit = new Retrofit.Builder()
.baseUrl("http://fy.iciba.com/") // 设置网络请求的URL
.addConverterFactory(GsonConverterFactory.create()) // 设置为Gson解析
.build(); /**
* 创建网络请求接口实例
*/
IGetRequest iGetRequest = retrofit.create(IGetRequest.class); /**
* GET请求方式 请求
*/
Call<GetTranslation> call = iGetRequest.getCall(); // 采用异步
call.enqueue(new Callback<GetTranslation>() { @Override
public void onResponse(Call<GetTranslation> call, Response<GetTranslation> response) {
// 代表请求成功
Log.d("@@@", "request Success" + response.body().toString() + " \n");
} @Override
public void onFailure(Call<GetTranslation> call, Throwable t) {
// 代表请求失败
Log.d("@@@", "request Failure" + t.getMessage());
}
});
}
}
activity的布局文件:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"> <Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="开始执行Post"
android:onClick="startPostRequest"
/> <Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="开始执行Get"
android:onClick="startGetRequest"
/> </LinearLayout>
执行结果:

Android-Retrofit-2.0-Post与Get-请求有道词典翻译的更多相关文章
- Android Retrofit 2.0 使用-补充篇
推荐阅读,猛戳: 1.Android MVP 实例 2.Android Retrofit 2.0使用 3.RxJava 4.RxBus 5.Android MVP+Retrofit+RxJava实践小 ...
- Android Retrofit 2.0使用
实例带你了解Retrofit 2.0的使用,分享目前开发Retrofit遇到的坑和心得. 添加依赖 app/build.gradle 1 compile 'com.squareup.retrofit2 ...
- android -------- Retrofit + RxJava2.0 + Kotlin + MVP 开发的 WanAndroid 项目
简介 wanandroid项目基于 Retrofit + RxJava2.0 + Kotlin + MVP 用到的依赖 implementation 'io.reactivex.rxjava2:rxj ...
- Android Retrofit 2.0文件上传
Android Retrofit 实现(图文上传)文字(参数)和多张图片一起上传 使用Retrofit进行文件上传,肯定离不开Part & PartMap. public interface ...
- Android Studio 2.0 正式版公布啦 (首次中文翻译)
Android Studio 2.0 公布了,添加了一些新特性: 1. 更加完好的 Instant Run 2. 更快的 Android Emulator 3.GPU Debugger Preview ...
- Android - Retrofit 2.0 使用教程(含实例讲解)
链接:https://blog.csdn.net/carson_ho/article/details/73732076
- 有道词典翻译(携带请求头和post参数请求)
一.静态爬取页面信息 有道翻译网址:http://fanyi.youdao.com/ 在翻译中输入python 找到接口和请求的方式 参数是From Data类型 需要把参数数据转换为字典, 复制粘贴 ...
- Android:手把手带你深入剖析 Retrofit 2.0 源码
前言 在Andrroid开发中,网络请求十分常用 而在Android网络请求库中,Retrofit是当下最热的一个网络请求库 今天,我将手把手带你深入剖析Retrofit v2.0的源码,希望你们会喜 ...
- Retrofit 2.0 超能实践(四),完成大文件断点下载
作者:码小白 文/CSDN 博客 本文出自:http://blog.csdn.net/sk719887916/article/details/51988507 码小白 通过前几篇系统的介绍和综合运用, ...
- Retrofit 2.0 超能实践(三),轻松实现文件/多图片上传/Json字符串
文:http://blog.csdn.net/sk719887916/article/details/51755427 Tamic 简书&csdn同步 通过前两篇姿势的入门 Retrofit ...
随机推荐
- kafka配置简要描述
配置文件在config/server.properties 下面的一些配置可能是你需要进行修改的. 这里为官方提供配置文件解释:https://kafka.apache.org/08/configur ...
- JSP自定义标签(标签处理器 tld文件)
标签的形式如下,标签处理器就是处理JSP页面中的标签的属性和内容,定义好之后就跟使用JSTL一样 <标签名 属性名="属性值" 属性名="属性值"> ...
- Nginx+Tomcat安装与配置(windows版)
相信很多人都听过nginx,这个小巧的东西慢慢地在吞食apache和IIS的份额.那究竟它有什么作用呢?可能很多人未必了解. 说到反向代理,可能很多人都听说,但具体什么是反向代理,很多人估计就不清楚了 ...
- Android中关于使用空格对齐文字
前言:今日编写新项目UI时,突然遇到文本有长有短无法对齐的问题(汗,以前竟从未遇到也从未考虑过这小小的问题),在资源文件中尝试Tab键.space空格键,发现效果都不能很好的实现,无奈只得请求度娘的协 ...
- 扩展方法(深入理解c#)
1. 静态类到扩展方法: 许多方法可能都适合转为扩展方法,只要具有以下特征: 1)你想为一个类型添加一些成员: 2)你不需要为类型的实例添加更多的数据: 3)你不能改变类型本身,因为是别人的代码 2. ...
- Hadoop3集群搭建之——hive添加自定义函数UDF
上篇: Hadoop3集群搭建之——虚拟机安装 Hadoop3集群搭建之——安装hadoop,配置环境 Hadoop3集群搭建之——配置ntp服务 Hadoop3集群搭建之——hive安装 Hadoo ...
- myeclipse部署项目的时候报No projects are available for deployment to this server但是项目明明存在
如题,今天在尝试部署从SVN上down下来的项目时,发现不能被tomcat识别成web项目!原因是SVN上down下来的项目的结构并非典型的web项目. 解决办法,右键项目->properti ...
- php中如何配置项目虚拟路径
php虚拟目录的设置在apache目录下打开conf->httpd.conf文件,找到<IfModule dir_module>,在</IfModule>后面添加如下代码 ...
- iOS后台唤醒实战:微信收款到账语音提醒技术总结
1.前言 微信为了解决小商户老板们在频繁交易中不方便核对.确认到账的功能痛点,产品MM提出了新版本需要支持收款到账语音提醒功能.本文借此总结了iOS平台上的APP后台唤醒和语音合成.播放等一系列技术开 ...
- 2018.10.27 洛谷P2915奶牛混合起来Mixed Up Cows(状压dp)
传送门 状压dp入门题. 按照题意建一个图. 要求的就是合法的链的总数. 直接f[i][j]f[i][j]f[i][j]表示当前状态为jjj,下一位要跟iii连起来的方案数. 然后从没被选并且跟iii ...
