2016-10-19 66 views
0

的陣列通過改造不能得到任何數據,這從服務器參數 https://lao.busnavi.asia/api/location.php?ids%5B%5D=132&ids%5B%5D=133&ids%5B%5D=131改造解析JSON與參數

JSON的URL請求陣列看起來像這樣 解析JSON時,我有一個問題json data

我的代碼

LatestBusLocation.java

@SerializedName("id") private int id; 
@SerializedName("status") private int status; 
@SerializedName("route_id") private String routeId; 
@SerializedName("lng") private double lng; 
@SerializedName("lat") private double lat; 
@SerializedName("accuracy") private double accuracy; 
@SerializedName("speed") private double speed; 
@SerializedName("heading") private float heading; 
@SerializedName("date") private Date date; 

接口類

public interface ApiService { 
@POST("location.php") 
Call<LatestBusLocation> loadLatestBusLocation(@Query("ids[]") int[] ids); 

}

MainActivity.java

int[] ids = {131, 132, 133}; 

    Call<LatestBusLocation> call = HttpManager.getInstance() 
      .getService().loadLatestBusLocation(ids); 
    call.enqueue(new Callback<LatestBusLocation>() { 
     @Override 
     public void onResponse(Call<LatestBusLocation> call, Response<LatestBusLocation> response) { 

      Log.e("WorkOrNote1", "Working"); 
      if (response.isSuccessful()) { 
       dao = response.body(); 
       Log.d("daoResponse", String.valueOf(dao.getId())); 

      } else { 
       try { 
        Log.e("LatestBusLocation", response.errorBody().string()); 
       } catch (IOException e) { 
        e.printStackTrace(); 
       } 
      } 
     } 

     @Override 
     public void onFailure(Call<LatestBusLocation> call, Throwable t) { 
      Log.e("onFailure", t.toString()); 
     } 
    }); 
+0

你正在使用Gson來解析json嗎? – crgarridos

回答

0

改造失敗,因爲你已經在Call指定的LatestBusLocation映射你的對象。這應該是一個List<LatestBusLocation>

此外,您將不得不添加反序列化器來正確映射,因爲您正在獲取對象(使用ids鍵)而不是正確的數組。看看this relationed answer

+0

我已經使用List 但它不能在logcat中工作我得到像這樣的錯誤消息:onFailure:java.lang.IllegalStateException:期望的BEGIN_ARRAY,但是BEGIN_OBJECT在第1行第2列路徑$ –

+0

我知道,因爲你是試圖從Web服務中獲取數組。但是你得到一個對象,它的嵌套對象的id是鍵。我用一個有用的鏈接更新了答案 – crgarridos