一、引用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,至於其他解決方法,請百度。