Retrofit 單例模式 聯網工具類 簡單使用
阿新 • • 發佈:2018-12-08
匯入依賴
implementation 'com.squareup.retrofit2:retrofit:2.4.0'
先寫一個介面
import java.util.Map;
import okhttp3.ResponseBody;
import retrofit2.Call;
import retrofit2.http.GET;
import retrofit2.http.POST;
import retrofit2.http.QueryMap;
import retrofit2.http.Url;
public interface RetrofitService { //註解@get post call 泛型 resPonse body get 括號字元型網址 加註解前面 map集合 泛型兩個字串 加查詢集合註解 map @GET Call<ResponseBody> get(@Url String url, @QueryMap Map<String,String> map); @POST Call<ResponseBody> post(@Url String url,@QueryMap Map<String,String> map); }
在寫工具類
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
import okhttp3.ResponseBody;
import retrofit2.Call;
import retrofit2.Callback;
import retrofit2.Response;
import retrofit2.Retrofit;
public class RetrofitUtils { private static RetrofitUtils retrofitUtils; private Retrofit retrofit; private RetrofitListener retrofitListener; //單利模式 //本類的構造方法改成私有的 private RetrofitUtils() { } //公共靜態的本類 get 本類名 public static RetrofitUtils getRetrofitUtils(){ //判斷提上去的本類為空 if (retrofitUtils==null){ //new 本類 返回值 提上去 retrofitUtils = new RetrofitUtils(); } //直接返回提上去的本類名 return retrofitUtils; } //公共的初始化方法 不傳東西 public void init(){ //new retrofit 返回值 提上去 在builder .base網址 .引號網址域名 後面加/ 。build 提交 retrofit = new Retrofit.Builder().baseUrl("域名+/").build(); } //公共的本類 get 方法 括號裡傳介面get 傳的資料 public RetrofitUtils get(String url, Map<String,String> map){ //判斷集合為空 if(map==null){ //直接map=new hasmap 泛型空 map=new HashMap<>(); } //呼叫初始化方法裡的retrofit 新建 括號裡呼叫介面 .get 括號裡傳網址和map 集合.enqueue 括號new 快捷鍵 retrofit.create(RetrofitService.class).get(url,map).enqueue(new Callback<ResponseBody>() { @Override public void onResponse(Call<ResponseBody> call, Response<ResponseBody> response) { //成功方法 //用傳進來的response .body .小寫字串 先抓異常 在返回值 try { String s = response.body().string(); //去下面定義介面回撥 //呼叫介面成功方法 傳字串 retrofitListener.success(s); } catch (IOException e) { e.printStackTrace(); } } @Override public void onFailure(Call<ResponseBody> call, Throwable t) { //失敗方法 //呼叫介面失敗方法 retrofitListener.fail(); } }); //記得返回this return this; } //post 賦值上面的 改兩個post //公共的本類 get 方法 括號裡傳介面get 傳的資料 public RetrofitUtils post(String url, Map<String,String> map){ //判斷集合為空 if(map==null){ //直接map=new hasmap 泛型空 map=new HashMap<>(); } //呼叫初始化方法裡的retrofit 新建 括號裡呼叫介面 .get 括號裡傳網址和map 集合.enqueue 括號new 快捷鍵 retrofit.create(RetrofitService.class).post(url,map).enqueue(new Callback<ResponseBody>() { @Override public void onResponse(Call<ResponseBody> call, Response<ResponseBody> response) { //成功方法 //用傳進來的response .body .小寫字串 先抓異常 在返回值 try { String s = response.body().string(); //去下面定義介面回撥 //呼叫介面成功方法 傳字串 retrofitListener.success(s); } catch (IOException e) { e.printStackTrace(); } } @Override public void onFailure(Call<ResponseBody> call, Throwable t) { //失敗方法 //呼叫介面失敗方法 retrofitListener.fail(); } }); //記得返回this return this; } //回撥介面方法 public void result(RetrofitListener retrofitListener){ //介面 返回值 this. 提上去 this.retrofitListener = retrofitListener; } //定義介面 public interface RetrofitListener{ //成功方法傳字串 void success(String s); //失敗方法 不穿值 void fail(); } }
在主頁面呼叫
一定要記得先初始化工具類 否則會崩
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;
public class MainActivity extends AppCompatActivity { private Button bt; private String url1="全部網址"; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //先初始化工具類 RetrofitUtils.getRetrofitUtils().init(); //獲取控制元件強轉提上去 bt=(Button)findViewById(R.id.bt); //點選事件 bt.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { //請求網路資料方法 dohttp(); } }); } private void dohttp() { //直接呼叫工具類 map 沒有就傳空 RetrofitUtils.getRetrofitUtils().get(url1,null).result(new RetrofitUtils.RetrofitListener() { @Override public void success(String s) { //吐司成功 Toast.makeText(MainActivity.this,"成功"+s,Toast.LENGTH_SHORT).show(); } @Override public void fail() { //吐司失敗 Toast.makeText(MainActivity.this,"失敗",Toast.LENGTH_SHORT).show(); } }); } }