日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > Android >内容正文

Android

Android开发之Retrofit小试牛刀

發布時間:2025/3/20 Android 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Android开发之Retrofit小试牛刀 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

感覺好久沒有寫Android的文章了,囧囧囧!因為Retrofit實在是太火了, 火得我一直躍躍欲試,但是由于種種原因吧,一直都沒有用過。周末閑來無事,利用一個以前開發中用過的服務器API來小試牛刀一下,非常簡單,記錄自己的第一次Retrofit之旅。

重要說明:由于涉及到商業機密,所以對請求的數據和服務器地址進行了處理。自己實驗時,請換成自己的服務器。

一、添加依賴、配置項目

這一步就不詳細說了,會的都會,基本就是添加兩個依賴和網絡訪問權限。

compile 'com.squareup.retrofit2:retrofit:2.1.0' compile 'com.squareup.retrofit2:converter-gson:2.1.0'<uses-permission android:name="android.permission.INTERNET" /> 復制代碼

二、根據服務器端返回的JSON數據配置自己的JavaBean

在項目中用Retrofit的時候,肯定和服務器端的哥們商量好了如何交互,也就是說已經知曉了服務器端會返回什么樣的數據(基本都是JSON,只是內容不一樣而已),這些數據你可以直接用字符串接收,然后自己處理,但是這么low的事情,Retrofit肯定可以幫我處理了,用上面的converter-gson就可以自動將JSON轉成我們的對象,前提是需要與返回的JSON字段進行映射,默認情況下字段名一樣就不會出什么問題,但是我卻踩了一個坑,下文會介紹。

  • 服務器端返回的JSON數據如下:
{"message":"ok","list":["id":"","abstract":"","title":"","url":""},...] 復制代碼
  • 根據上面的JSON數據創建JavaBean
import com.google.gson.annotations.SerializedName; import java.util.List;/*** Created by yangfan on 2017/1/7.*///與服務器端數據進行字段映射 public class NewsInfo {private String message;private List<News> list;public String getMessage() {return message;}public void setMessage(String message) {this.message = message;}public List<News> getList() {return list;}public void setList(List<News> list) {this.list = list;}public static class News {private String id;//@SerializedName:后面是服務器端返回的數據字段名 可以與本地不一樣 該關鍵字就是用來映射的@SerializedName("abstract")private String _abstract;private String title;private String url;public String getId() {return id;}public void setId(String id) {this.id = id;}public String get_abstract() {return _abstract;}public void set_abstract(String _abstract) {this._abstract = _abstract;}public String getTitle() {return title;}public void setTitle(String title) {this.title = title;}public String getUrl() {return url;}public void setUrl(String url) {this.url = url;}} }復制代碼

踩坑記錄:服務器端居然有一個abstract字段,但是這個是Java關鍵字啊,怎么辦?用@SerializedName告訴Retrofit,我想你把該字段映射成我自定義的名字。

配置訪問服務器API的接口

這個就是真正的訪問服務器的本地API了,我這里只用了GET,其實遠不止這個功能,可以參考官方文檔。

import retrofit2.Call; import retrofit2.http.GET; import retrofit2.http.Query;/*** Created by yangfan on 2017/1/7.*/ public interface NewsInterface {//獲取服務器的新聞列表,由于新聞類型和分頁顯示的需要,需要傳遞三個參數@GET("news/list")Call<NewsInfo> newsList(@Query("type") String type, @Query("pn") String pn, @Query("ps") String ps);} 復制代碼

Activity

配置好以上信息以后,就可以開始寫Android的程序了。因為我的程序比較簡單,所以我很快就成功獲取數據了,這一塊沒怎么踩坑。

public class MainActivity extends AppCompatActivity {private TextView tvResult;//服務器的基地址 與 @GET("news/list")拼接private static final String baseUrl = "http://服務器地址/";@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);tvResult = (TextView) findViewById(R.id.tvResult);initRetrofit();}private void initRetrofit() {Retrofit retrofit = new Retrofit.Builder().baseUrl(baseUrl).addConverterFactory(GsonConverterFactory.create()).build();NewsInterface newsInterface = retrofit.create(NewsInterface.class);Call<NewsInfo> callNewsInfo = newsInterface.newsList("1", "1", "10");callNewsInfo.enqueue(new Callback<NewsInfo>() {@Overridepublic void onResponse(Call<NewsInfo> call, Response<NewsInfo> response) {//成功if (response.code() == 200) {//將返回的數據轉換成自定義的對象NewsInfo newsInfo = response.body();if(newsInfo.getMessage().equals("ok")){//最爽的地方---直接可以進行UI操作tvResult.setText(newsInfo.getList().get(0).get_abstract());}} else {//請求失敗tvResult.setText("查詢失敗!響應碼為:" + response.code());}}@Overridepublic void onFailure(Call<NewsInfo> call, Throwable t) {//請求失敗t.printStackTrace();tvResult.setText("查詢失敗!錯誤原因:" + t.getCause());}});} }復制代碼

運行結果

Retrofit功能非常強大,我也看了很多文檔,上面用的只是冰山一角。目前感覺最大的好處就是可以直接在回調中操作主線程的UI,再也不需要用Handler了,其他牛逼的功能和好處待學習、待發掘。

轉載于:https://juejin.im/post/5a3113875188257df8462c9a

總結

以上是生活随笔為你收集整理的Android开发之Retrofit小试牛刀的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。