作者:Valar_Ray
如需轉載請保留原文鏈接
IDE:Android Studio
Retrofit版本:2.3.0
Gson版本:2.8.1
retrofit的官方文檔:http://square.github.io/retrofit/
retrofit gitHub項目地址:https://github.com/square/retrofit
gson gitHub項目地址:https://github.com/google/gson
本文目錄:
- Retrofit與Gson包的引入
- 實體對象的創建
- 接口定義
- Retrofit對象的創建與實現
- 結論(踩過的坑)
1.Retrofit與Gson包的引入
在Android項目的build.gradle中的添加
compile 'com.squareup.retrofit2:retrofit:2.3.0'
compile 'com.google.code.gson:gson:2.8.1'
compile 'com.squareup.retrofit2:converter-gson:2.3.0'
2.實體對象的創建
先看一下要解析的Json數據:
{"total": 381,"per_page": 8,"current_page": 1,"last_page": 48,
"data": [{"id": 1,"title": "南極人冰絲席涼席三件套1.8m床可折疊夏季涼席1.5宿舍單人席子1.2"},
{"id": 2,"title": "夏季背心"}]
}
根據Json數據創建的實體對象如下
首先是Goods.class:
public class Goods{
public int total;
public int per_page;
public List<Good> data;
public int getTotal() {
return total;
}
public void setTotal(int total) {
this.total = total;
}
public int getPer_page() {
return per_page;
}
public void setPer_page(int per_page) {
this.per_page = per_page;
}
public List<Good> getData() {
return data;
}
public void setData(List<Good> data) {
this.data = data;
}
@Override
public String toString() { //重寫toString方法,便于觀察后來的解析結果
return "Goods{" +
"total=" + total +
", per_page=" + per_page +
", data=" + data +
'}';
}
}
然后是Good.class:
public class Good {
public int id;
public String title;
@Override
public String toString() {
return "Good{" +
"id=" + id +
", title='" + title + '\'' +
'}';
}
}
3.接口定義
import retrofit2.Call;
import retrofit2.http.GET;
public interface GitHubService {
@GET("api/test") \\其中寫的是Url中主機名后面的地址
Call<Goods> getGood();
}
4.Retrofit對象的創建與實現
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import retrofit2.Call;
import retrofit2.Callback;
import retrofit2.Response;
import retrofit2.Retrofit;
import retrofit2.converter.gson.GsonConverterFactory;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Retrofit retrofit = new Retrofit.Builder()
.baseUrl("http://192.168.16.125/") //要訪問的主機地址,注意以 /(斜線) 結束,不然可能會拋出異常
.addConverterFactory(GsonConverterFactory.create()) //添加Gson
.build();
GitHubService service = retrofit.create(GitHubService.class);
Call<Goods> call = service.getGood();
call.enqueue(new Callback<Goods>() {
@Override
public void onResponse(Call<Goods> call, Response<Goods> response) {
Goods goods = response.body();
Log.d("sxl", goods != null ? goods.toString() :"null");
}
@Override
public void onFailure(Call<Goods> call, Throwable t) {
t.printStackTrace();
}
});
}
}
Log打印出的結果如下:
D/sxl: Goods{total=381, per_page=8, data=[Good{id=1, title='南極人冰絲席涼席三件套1.8m床可折疊夏季涼席1.5宿舍單人席子1.2'}, Good{id=2, title='........
5.結論(踩過的坑)
- 注意先開啟App的網絡權限
<uses-permission android:name="android.permission.INTERNET"></uses-permission>
- 別忘了導入 com.squareup.retrofit2:converter-gson:2.3.0
本文參考:http://square.github.io/retrofit/
http://www.lxweimin.com/p/308f3c54abdd
http://blog.csdn.net/u012301841/article/details/49685677