Android Retrofit使用實例--get請求

一、引用Retrofit庫

我使用的是androidstudio。在app下的build.gradle裏添加如下圖代碼:

implementation 'com.squareup.retrofit2:retrofit:2.3.0'
implementation 'com.squareup.retrofit2:converter-gson:2.3.0'

二、權限

在AndroidManifest.xml文件中加入權限,如下:

<uses-permission android:name="android.permission.INTERNET" />

三、自定義實體類,對應服務器返回的數據的實體類

public class OutWarehouseOrder {
    public String sCode;
    public String dOutWarehouseDate;
    public String LicensePlateNumber;
    public String TotalItems;
    public String TotalCubic;
}

四、請求接口

import java.util.List;
import retrofit2.Call;
import retrofit2.http.GET;

public interface GetRequestInterface {
    // 註解裏傳入 網絡請求 的部分URL地址
    // Retrofit把網絡請求的URL分成了兩部分:一部分放在Retrofit對象裏,另一部分放在網絡請求接口裏

    /**
     * 獲取列表
     * */
    @GET("api/Order/List")
    Call<List<OutWarehouseOrder>> getList();
}

注意:上面代碼裏@GET("api/Order/List")的api/Order/List只是請求地址的一部分,另一部分在mainactivity裏創建Retrofit時的baseUrl賦值。

五、發送請求

import retrofit2.Call;
import retrofit2.Callback;
import retrofit2.Response;
import retrofit2.Retrofit;
import retrofit2.converter.gson.GsonConverterFactory;

public class MainActivity extends AppCompatActivity {
    private String TAG = "MainActivity_Log";//日誌標記

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        //加載活動頁面activity_main.xml
        setContentView(R.layout.activity_main);

        GetList();//獲取列表
    }

    private void GetList(){
        //創建Retrofit對象
        Retrofit retrofit = new Retrofit.Builder()
                .baseUrl("http://127.0.0.1:8080/") //基礎url,其他部分在GetRequestInterface裏
                .addConverterFactory(GsonConverterFactory.create()) //Gson數據轉換器
                .build();

        //創建網絡請求接口實例
        GetRequestInterface request = retrofit.create(GetRequestInterface.class);
        Call<List<OutWarehouseOrder>> call = request.getTodayOutWarehouse();

        //發送網絡請求(異步)
        call.enqueue(new Callback<List<OutWarehouseOrder>>() {
            @Override
            public void onResponse(Call<List<OutWarehouseOrder>> call, Response<List<OutWarehouseOrder>> response) {
                //Log.i(TAG, "GetOutWarehouseList->onResponse(MainActivity.java): "+response.body());

                List<OutWarehouseOrder> OutWarehouseList = response.body();
                Log.i(TAG, OutWarehouseList.get(0).sCode);
            }

            @Override
            public void onFailure(Call<List<OutWarehouseOrder>> call, Throwable t) {
                Log.i(TAG, "GetOutWarehouseList->onFailure(MainActivity.java): "+t.toString() );
            }
        });
    }

}

這樣服務器傳過來的json數組,就被解析到List<OutWarehouseOrder> OutWarehouseList 中了。

 

注意:如果是Android9.0的話,會報“not permitted by network security policy”錯誤,因爲9.0限制了明文流量的網絡請求,所以推薦使用https,至於其他解決方法,請百度。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章