首頁>技術>

前面我已經把現在最為流行三個網路框架的其中兩個volley和Okhttp3擼了一遍,接下來我就把最後的一個Retrofit2也擼一下。最近也搞了一下Android SDK開發的事,發現網上對於Android SDK開發的資料真的很少。到時我會把這個框架的功能整合到一個Jar包上,做一個簡單的SDK開發來讓大家也瞭解一下。

我們先來了解一下Retrofit2這個網路框架,準確來說Retrofit是基於Okhttp3的官方封裝一個網路框架。所以這個框架的使用跟Okhttp3非常的相似,如果你在此之前有看過我前面的OKhttp3的教程或者其他人的教程的話,接下來的內容你就會更加的容易瞭解。

由於最近更新了Androidstudio4.0,便用這個編譯環境來試水啦,不過使用原理都是一樣的。首先我們先建立一個名為RetrofitDemo的專案,然後在app的gradle下新增Retrofit的依賴包。如下:

  implementation 'com.squareup.retrofit2:retrofit:2.4.0'

然後我們嘗試做這樣一個功能,當我們點選一個GET按鈕時就向服務端傳送一個GET請求,然後我們把返回來的結果透過吐司展示出來。當我們點選一個POST按鈕就向服務端傳送一個POST請求,也把返回來的結果吐司展現。XML佈局如下:

<Button      android:layout_margin="10dp"    android:id="@+id/btn_login_get"   android:text="GET登入"      android:layout_width="match_parent"      android:layout_height="wrap_content" />     <Button      android:layout_margin="10dp"   android:id="@+id/btn_login_post"  android:text="POST登入"      android:layout_width="match_parent"   android:layout_height="wrap_content" />

接下來我們建立一個名為Api的介面,這是根據Retrofit的官方文件的格式來定義。介面程式碼如下:

public interface Api {   @GET("寫上你要訪問的地址")//GET請求註釋    Call<ResponseBody> getUserInfo();       @POST("寫上你要訪問的地址")//POST請求註釋     Call<User> postSubmit (@Body User user); }

主函數里,因為我們的POST請求是以JSON的格式來返回資料的,所以我們要先在app.gradle裡新增GSON依賴,程式碼如下:

 implementation 'com.squareup.retrofit2:converter-gson:2.4.0'

接下來我們分別為兩個按鈕新增點選事件,並呼叫剛才定義介面的GET和POST方法來驗證是否能夠正常訪問我們需要訪問的地址,並進行吐司,最後還要在AndroidManifest裡面註冊網路許可權。主函式程式碼如下:

  private Button btn_login_get,btn_login_post;   private  Api api;    @Override   protected void onCreate(Bundle savedInstanceState) {     super.onCreate(savedInstanceState);     setContentView(R.layout.activity_main);       btn_login_get = findViewById(R.id.btn_login_get);     btn_login_post = findViewById(R.id.btn_login_post);       Retrofit retrofit = new Retrofit.Builder()           .baseUrl("寫上你要訪問的基地址如:http://127.0.0.1:8080/")              .addConverterFactory(GsonConverterFactory.create())//透過Gson的格式來解析資料        .build();      api = retrofit.create(Api.class);       btn_login_post.setOnClickListener(new View.OnClickListener() {                                         @Override                                               public void onClick(View v) {               User user = new User();                   user.setMoyo_sdk_name("admin");            user.setMoyo_sdk_pwd("123456");               api.postSubmit(user).enqueue(new Callback<User>() {//呼叫了我們在介面上定義的POST方法postSubmit(請求型別) Callback(返回型別)                                            @Override                                                    public void onResponse(Call<User> call, Response<User> response) {         String name = response.body().getMoyo_sdk_name();            String password = response.body().getMoyo_sdk_pwd();           int code = response.body().getCode();                   Toast.makeText(MainActivity.this,"name:"+name+"password:"+password+"code:"+code,Toast.LENGTH_LONG).show();             }                      @Override                public void onFailure(Call<User> call, Throwable t) {         }          });         }      });      btn_login_get.setOnClickListener(new View.OnClickListener() {                                     @Override                                        public void onClick(View v) {        //此部分為不簡寫,適合新手檢視原理      Call<ResponseBody> call = api.getUserInfo();           call.enqueue(new Callback<ResponseBody>() {                       @Override                                  public void onResponse(Call<ResponseBody> call, Response<ResponseBody> response) {////             try {                              String msg = response.body().string();                     Toast.makeText(MainActivity.this,msg,Toast.LENGTH_LONG).show();//                } catch (IOException e) {              e.printStackTrace();                 }             }                 @Override      public void onFailure(Call<ResponseBody> call, Throwable t) {     }        });          api.getUserInfo().enqueue(new Callback<ResponseBody>() {//呼叫了介面上的GET方法getUserInfo()                              @Override                                         public void onResponse(Call<ResponseBody> call, Response<ResponseBody> response) {        try {                           String result = response.body().string();            Toast.makeText(MainActivity.this,result,Toast.LENGTH_LONG).show();           } catch (IOException e) {       e.printStackTrace();            }                 }                   @Override        public void onFailure(Call<ResponseBody> call, Throwable t) {    }         });          }      }); }

在我們處理資料的時候我們可以選擇建立一些Bean類,因為每個人請求的後臺所得到的資料都不一樣我就不把我的Bean類的原始碼粘貼出來了。在官方文件中還有很多的提交形式,有興趣的可以去了解一下。我這裡算了拋磚引玉,如果有什麼錯誤的地方歡迎各位提出來一個探討。

12
  • BSA-TRITC(10mg/ml) TRITC-BSA 牛血清白蛋白改性標記羅丹明
  • 程式碼複查常見問題