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