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,至于其他解决方法,请百度。

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