//一些需要用到的依赖,
annotationProcessor 'com.jakewharton:butterknife-compiler:8.4.0'
//retrofit依赖
compile 'com.squareup.retrofit2:retrofit:2.1.0'
//retrofit自带的一些解析
compile 'com.squareup.retrofit2:converter-gson:2.1.0'
compile 'com.jakewharton:butterknife:8.4.0'
//截断器
compile 'com.squareup.okhttp3:logging-interceptor:3.4.2'
//gson依赖
compile 'com.google.code.gson:gson:2.8.0'
========================================================================================
正文:**************get请求的界面*********************************************
public class RetrofitGetActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_ok_http_get);
ButterKnife.bind(this);
}
@OnClick(R.id.btn_get)
public void onClick() {
// 去执行请求
RetrofitNet.getInstance().mUserRetrofitApi.getData("language:java",1).enqueue(new Callback<ResponseBody>() {
// 请求成功
@Override
public void onResponse(Call<ResponseBody> call, Response<ResponseBody> response) {
// 可以做UI的更新
Toast.makeText(RetrofitGetActivity.this, "onResponse:"+response.code(), Toast.LENGTH_SHORT).show();
}
// 请求失败
@Override
public void onFailure(Call<ResponseBody> call, Throwable t) {
Toast.makeText(RetrofitGetActivity.this, "onFailure:"+t.getMessage(), Toast.LENGTH_SHORT).show();
}
});
}
}
======================================================================
public class RetrofitNet {
private static RetrofitNet mRetrofitNet;
public final UserRetrofitApi mUserRetrofitApi;
private RetrofitNet() {
HttpLoggingInterceptor interceptor = new HttpLoggingInterceptor();
interceptor.setLevel(HttpLoggingInterceptor.Level.BODY);
OkHttpClient okHttpClient = new OkHttpClient.Builder()
.addInterceptor(interceptor)
.build();
// Retrofit初始化
Retrofit retrofit = new Retrofit.Builder()
.baseUrl("https://api.github.com")// Retrofit必须要添加的baseUrl
.client(okHttpClient)// 给Retrofit设置OKHttpClient,暂时只是为了使用拦截器
.addConverterFactory(GsonConverterFactory.create())// 添加Gson转换器
.build();
// 实现接口请求
mUserRetrofitApi = retrofit.create(UserRetrofitApi.class);
}
public static synchronized RetrofitNet getInstance(){
if (mRetrofitNet==null){
mRetrofitNet = new RetrofitNet();
}
return mRetrofitNet;
}
}
=============================================================================
/ 通过注解构建请求
public interface UserRetrofitApi {
/**
* Retrofit使用:需要创建一个接口,构建请求,通过Retrofit的Create方法
*/
// Request request = new Request.Builder()
// .url(url)
// .get()
// .build();
@GET("https://api.github.com/search/repositories")
Call<ResponseBody> getData(@Query("q") String q, @Query("page") int page);
@POST("http://admin.syfeicuiedu.com/Handler/UserHandler.ashx?action=register")
Call<UserResult> register(@Body User user);
/**
* 注解:
* 消息结构方面的注解
* 1. 请求方式:@GET @POST
* 2. 请求路径:url 单独讲解
* 3. 请求头:
*
* @Headers({"Accept-Language:en","X-type:zxc","",""})添加头信息
* @Header("X-type")String type是在方法参数里面,动态修改添加的头信息
* 4. 请求体:@Body User body
* @GET @POST @Headers @Header @Body
* <p>
* Url 处理方面注解
* 1. 可替换块:https://api.github.com/repos/{owner}/{repo}
* @Path("owner")String owe
* <p>
* 2.查询参数:https://api.github.com/search/repositories?q=language:java&page=1
* get请求需要动态传入查询参数的时候
* @Query("q")String q
* @QueryMap Map<String,String> map
* <p>
* 3. 整合:https://api.github.com/repos/{owner}/{repo}?q=language:java&page=1
* 可以一起使用,没有影响
* <p>
* 4. 表单提交:POST https://api.github.com/search/repositories
* 参数a ...
* 参数b ...
* @FormUrlEncoded
* @Field("a") @FieldMap Map<>
* <p>
* 5. 多部分提交:@Multipart
* @Part
*/
@Headers({"Accept-Language:en", "X-type:zxc", "", ""})
@POST("")
Call<ResponseBody> getA(@Header("X-type") String type, @Body User body);
@GET("https://api.github.com/repos/{owner}/{repo}")
Call<ResponseBody> getB(@Path("owner") String owner, @Path("repo") String repo);
@GET("https://api.github.com/{search}/repositories")
Call<ResponseBody> getC(@Path("search") String sear, @Query("q") String q, @Query("page") int page, @QueryMap Map<String, String> map);
@FormUrlEncoded
@POST("")
Call<ResponseBody> getD(@Field("a") String a, @Field("b") String b, @FieldMap Map<String, String> map);
@Multipart
@POST("")
Call<ResponseBody> getE(@Part("photo") RequestBody requestBody, @Part("username") String name);
@POST("http://wx.feicuiedu.com:9094/yitao/UserWeb?method=update")
@Multipart
Call<ResponseBody> getresult(@Part("user")Multsult user);
@POST("http://wx.feicuiedu.com:9094/yitao/UserWeb?method=register")
@FormUrlEncoded
Call<ResponseBody> getformat(@Field("username")String name,@Field("password")String password);
}
==================================================================================
/ 通过注解构建请求
public interface UserRetrofitApi {
/**
* Retrofit使用:需要创建一个接口,构建请求,通过Retrofit的Create方法
*/
// Request request = new Request.Builder()
// .url(url)
// .get()
// .build();
@GET("https://api.github.com/search/repositories")
Call<ResponseBody> getData(@Query("q") String q, @Query("page") int page);
@POST("http://admin.syfeicuiedu.com/Handler/UserHandler.ashx?action=register")
Call<UserResult> register(@Body User user);
/**
* 注解:
* 消息结构方面的注解
* 1. 请求方式:@GET @POST
* 2. 请求路径:url 单独讲解
* 3. 请求头:
*
* @Headers({"Accept-Language:en","X-type:zxc","",""})添加头信息
* @Header("X-type")String type是在方法参数里面,动态修改添加的头信息
* 4. 请求体:@Body User body
* @GET @POST @Headers @Header @Body
* <p>
* Url 处理方面注解
* 1. 可替换块:https://api.github.com/repos/{owner}/{repo}
* @Path("owner")String owe
* <p>
* 2.查询参数:https://api.github.com/search/repositories?q=language:java&page=1
* get请求需要动态传入查询参数的时候
* @Query("q")String q
* @QueryMap Map<String,String> map
* <p>
* 3. 整合:https://api.github.com/repos/{owner}/{repo}?q=language:java&page=1
* 可以一起使用,没有影响
* <p>
* 4. 表单提交:POST https://api.github.com/search/repositories
* 参数a ...
* 参数b ...
* @FormUrlEncoded
* @Field("a") @FieldMap Map<>
* <p>
* 5. 多部分提交:@Multipart
* @Part
*/
@Headers({"Accept-Language:en", "X-type:zxc", "", ""})
@POST("")
Call<ResponseBody> getA(@Header("X-type") String type, @Body User body);
@GET("https://api.github.com/repos/{owner}/{repo}")
Call<ResponseBody> getB(@Path("owner") String owner, @Path("repo") String repo);
@GET("https://api.github.com/{search}/repositories")
Call<ResponseBody> getC(@Path("search") String sear, @Query("q") String q, @Query("page") int page, @QueryMap Map<String, String> map);
@FormUrlEncoded
@POST("")
Call<ResponseBody> getD(@Field("a") String a, @Field("b") String b, @FieldMap Map<String, String> map);
@Multipart
@POST("")
Call<ResponseBody> getE(@Part("photo") RequestBody requestBody, @Part("username") String name);
@POST("http://wx.feicuiedu.com:9094/yitao/UserWeb?method=update")
@Multipart
Call<ResponseBody> getresult(@Part("user")Multsult user);
@POST("http://wx.feicuiedu.com:9094/yitao/UserWeb?method=register")
@FormUrlEncoded
Call<ResponseBody> getformat(@Field("username")String name,@Field("password")String password);
}
=====================================================================================实体类
public class Multsult {
String username;
String password;
public Multsult() {
}
public Multsult(String username, String password) {
this.username = username;
this.password = password;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
@Override
public String toString() {
return "Multsult{" +
"username='" + username + '\'' +
", password='" + password + '\'' +
'}';
}
}
******************************post请求********************
public class RetrofitPostActivity extends AppCompatActivity {
@BindView(R.id.et_name)
EditText mEtName;
@BindView(R.id.et_password)
EditText mEtPassword;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_ok_http_post);
ButterKnife.bind(this);
}
@OnClick(R.id.btn_register)
public void onClick() {
// 去进行注册的请求
User user = new User(mEtName.getText().toString(), mEtPassword.getText().toString());
RetrofitNet.getInstance().mUserRetrofitApi.register(user).enqueue(new Callback<UserResult>() {
@Override
public void onResponse(Call<UserResult> call, Response<UserResult> response) {
if (response.isSuccessful()) {
UserResult userResult = response.body();
if (userResult != null) {
Toast.makeText(RetrofitPostActivity.this, "请求成功" + userResult.getErrmsg(), Toast.LENGTH_SHORT).show();
}
}
}
@Override
public void onFailure(Call<UserResult> call, Throwable t) {
Toast.makeText(RetrofitPostActivity.this, "请求失败", Toast.LENGTH_SHORT).show();
}
});
}
}
========================================================================
实体类
public class UserResult {
/**
* errcode : 1
* errmsg : 注册成功!
* tokenid : 171
*/
@SerializedName("errcode")
private int code;
private String errmsg;
private int tokenid;
public int getCode() {
return code;
}
public void setCode(int code) {
this.code = code;
}
public String getErrmsg() {
return errmsg;
}
public void setErrmsg(String errmsg) {
this.errmsg = errmsg;
}
public int getTokenid() {
return tokenid;
}
public void setTokenid(int tokenid) {
this.tokenid = tokenid;
}
}
==================================================================================
附上下载demo地址
链接:http://pan.baidu.com/s/1nvLXl3N 密码:bgs1