retrofit github地址 : https://github.com/square/retrofit
文章介绍(转载地址):http://blog.csdn.net/bitian123/article/details/51899716
接口
package interfaces;
import model.RobotResponse;
import retrofit2.Call;
import retrofit2.http.GET;
import retrofit2.http.Query;
/**
* Created by yj on 2016/10/25.
* 机器人问答
*/
public interface RobotServes {
// 使用这个接口返回的值是String
@GET("robot/index")
Call<String> getString(@Query("info") String info, @Query("key") String key);
// 使用这个接口返回的值已经封装成实体类了
@GET("robot/index")
Call<RobotResponse> get(@Query("info") String info, @Query("key") String key);
}
使用
package com.example.administrator.myapplication;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import interfaces.RobotServes;
import model.RobotResponse;
import retrofit2.Call;
import retrofit2.Callback;
import retrofit2.Response;
import retrofit2.Retrofit;
import retrofit2.converter.gson.GsonConverterFactory;
import retrofit2.converter.scalars.ScalarsConverterFactory;
public class MainActivity extends AppCompatActivity {
private final String TAG = "MainActivity";
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// 网络请求
Retrofit retrofit = new Retrofit.Builder()
.baseUrl("http://op.juhe.cn/")
// 增加返回值为String的支持
.addConverterFactory(ScalarsConverterFactory.create())
// 增加返回值为Gson的支持
.addConverterFactory(GsonConverterFactory.create())
.build();
/*-----------------------------------------------------------------------------*/
// 接口实体,返回的是String
RobotServes phoneServes = retrofit.create(RobotServes.class);
Call<String> call = phoneServes.getString("你好", "2833a660902644508778b5dfd452c080");
// 发送请求
call.enqueue(new Callback<String>() {
// 响应回调
@Override
public void onResponse(Call<String> call, Response<String> response) {
Log.d(TAG, "onResponse = \n"
+ "response.message() = " + response.message() + "\n"
+ "response.body() = " + response.body());
/*分割*/
Log.d(TAG, "<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<");
}
// (包括不限于) 网络连接不上时回调
@Override
public void onFailure(Call<String> call, Throwable t) {
Log.d(TAG, "onFailure = \n" + t.toString());
}
});
/*----------------------第二种方式------------------------*/
// 返回的是实体类
RobotServes serves = retrofit.create(RobotServes.class);
Call<RobotResponse> ca = serves.get("你好", "2833a660902644508778b5dfd452c080");
ca.enqueue(new Callback<RobotResponse>() {
@Override
public void onResponse(Call<RobotResponse> call, Response<RobotResponse> response) {
Log.d(TAG, response.body().getResult().getText());
}
@Override
public void onFailure(Call<RobotResponse> call, Throwable t) {
}
});
}
}
实体
package model;
/**
* Created by yj on 2016/10/25.
*/
public class RobotResponse {
private String reason;
private String error_code;
private ResultResponse result;
public String getReason() {
return reason;
}
public void setReason(String reason) {
this.reason = reason;
}
public String getError_code() {
return error_code;
}
public void setError_code(String error_code) {
this.error_code = error_code;
}
public ResultResponse getResult() {
return result;
}
public void setResult(ResultResponse result) {
this.result = result;
}
}
package model;
/**
* Created by yj on 2016/10/25.
*/
public class ResultResponse {
private String code;
private String text;
public String getCode() {
return code;
}
public void setCode(String code) {
this.code = code;
}
public String getText() {
return text;
}
public void setText(String text) {
this.text = text;
}
}
结果
10-25 13:00:57.998 8037-8037/com.example.administrator.myapplication D/MainActivity: onResponse =
10-25 13:00:57.998 8037-8037/com.example.administrator.myapplication D/MainActivity: response.message() = OK
10-25 13:00:57.998 8037-8037/com.example.administrator.myapplication D/MainActivity: response.body() = {"reason":"成功的返回","result":{"code":100000,"text":"嘿嘿,你好我好,大家都好~"},"error_code":0}
10-25 13:00:57.998 8037-8037/com.example.administrator.myapplication D/MainActivity: <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
10-25 13:00:57.998 8037-8037/com.example.administrator.myapplication D/MainActivity: 你好呀,希望你今天过的快乐
注意:这里的enqueue方法是将请求入队, 实际结果回调的顺序和入队顺序无关,取决于响应时间的长短。