Android 我发布了一些值,并在改型中以数组的形式得到响应,但得到了错误
错误说明: com.google.gson.JsonSyntaxException:java.lang.IllegalStateException:应为BEGIN_对象,但在改装中位于第1行第2列路径$处的BEGIN_数组 这是我的职责:Android 我发布了一些值,并在改型中以数组的形式得到响应,但得到了错误,android,mysql,json,retrofit,Android,Mysql,Json,Retrofit,错误说明: com.google.gson.JsonSyntaxException:java.lang.IllegalStateException:应为BEGIN_对象,但在改装中位于第1行第2列路径$处的BEGIN_数组 这是我的职责: public interface I_GetStockTransferForLocation { @FormUrlEncoded @POST("/DataAccessService.svc/GetStockTransferForLocation
public interface I_GetStockTransferForLocation {
@FormUrlEncoded
@POST("/DataAccessService.svc/GetStockTransferForLocation")
void getStockFrLocation(@Field("COMPANY_ID")
String companyId ,@Field("LOCATION_ID")
String locationId ,@Field("TRANSACTION_DATE")
String transactionDate ,
Callback<RFResp_GetStockTransferFrLocatn> callback); }
public class RFResp_GetStockTransferFrLocatn {
@SerializedName("StockTransferList") private List<StockTransferList>
stockTransferList = new ArrayList<StockTransferList>();
@SerializedName("Transfer_Date")
private String transferDate; }
private void getStockTransferFrLocation() {
RestAdapter adapterGetStockTransfer = new RestAdapter.Builder()
.setEndpoint(ROOT_URL) //Setting the Root URL
.build(); //Finally building the adapter
//Creating object for our interface
I_GetStockTransferForLocation api = adapterGetStockTransfer.create(I_GetStockTransferForLocation.class);
api.getStockFrLocation(strCompanyId, strLocationId, strST_date, new Callback<RFResp_GetStockTransferFrLocatn>() {
@Override
public void success(RFResp_GetStockTransferFrLocatn rfResp_getStockTransferFrLocatn, retrofit.client.Response response) {
List<StockTransferList> stockTransferLists = rfResp_getStockTransferFrLocatn.getStockTransferList();
db = new Database(context);
stckTransferFk = db.getLastStock();
if (stckTransferFk == 0){
stckTransferFk = 1;
}
else{
stckTransferFk = stckTransferFk + 1;
}
if(stockTransferLists.size()>0) {
db = new Database(context);
db.clearStockTransferData();
db.createStockTransfer(rfResp_getStockTransferFrLocatn.getTransferDate(), stockTransferLists,stckTransferFk);
Intent intent = new Intent("com.dj.prachi");
intent.putExtra("customers_count",db.getCustomerCount()+"");
intent.putExtra("products_count",db.getProductCount()+"");
LocalBroadcastManager.getInstance(getApplicationContext()).sendBroadcast(intent);
Log.e("Prachi","Stock Transfer array"+stockTransferLists.size());
}
}
@Override
public void failure(RetrofitError error) {
Log.e("Prachi","Stock Transfr Error"+error.getMessage());
}
});
}
按如下所示创建父pojo并在该pojo中获取响应:
public class ParentPojo extends List<RFResp_GetStockTransferFrLocatn > {
}
公共类ParentPojo扩展列表{
}
您的方法如下所示:
private void getStockTransferFrLocation() {
RestAdapter adapterGetStockTransfer = new RestAdapter.Builder()
.setEndpoint(ROOT_URL) //Setting the Root URL
.build(); //Finally building the adapter
//Creating object for our interface
I_GetStockTransferForLocation api = adapterGetStockTransfer.create(I_GetStockTransferForLocation.class);
api.getStockFrLocation(strCompanyId, strLocationId, strST_date, new Callback<RFResp_GetStockTransferFrLocatn>() {
@Override
public void success(ParentPojo rfResp_getStockTransferFrLocatn, retrofit.client.Response response) {
for(int i=0;i<rfResp_getStockTransferFrLocatn.length;i++){
List<RFResp_GetStockTransferFrLocatn > stockTransferLists= rfResp_getStockTransferFrLocatn.get(i).getStockTransferList();
db = new Database(context);
stckTransferFk = db.getLastStock();
if (stckTransferFk == 0){
stckTransferFk = 1;
}
else{
stckTransferFk = stckTransferFk + 1;
}
if(stockTransferLists.size()>0) {
db = new Database(context);
db.clearStockTransferData();
db.createStockTransfer(rfResp_getStockTransferFrLocatn.getTransferDate(), stockTransferLists,stckTransferFk);
Intent intent = new Intent("com.dj.prachi");
intent.putExtra("customers_count",db.getCustomerCount()+"");
intent.putExtra("products_count",db.getProductCount()+"");
LocalBroadcastManager.getInstance(getApplicationContext()).sendBroadcast(intent);
Log.e("Prachi","Stock Transfer array"+stockTransferLists.size());
}
}
}
@Override
public void failure(RetrofitError error) {
Log.e("Prachi","Stock Transfr Error"+error.getMessage());
}
});
}
private void getStockTransferFrLocation(){
RestAdapter adaptertstocktransfer=new RestAdapter.Builder()
.setEndpoint(根URL)//设置根URL
.build();//最终生成适配器
//为我们的接口创建对象
I_GetStockTransferForLocation api=adapterGetStockTransfer.create(I_GetStockTransferForLocation.class);
api.getStockFrLocation(strCompanyId、strLocationId、str_日期、新回调(){
@凌驾
public void成功(ParentPojo rfResp_getStockTransferFrLocatn,reformation.client.Response){
对于(int i=0;i0){
db=新数据库(上下文);
db.clearStockTransferData();
db.createStockTransfer(rfResp_getStockTransferFrLocatn.getTransferDate(),StockTransferList,stckTransferFk);
意向意向=新意向(“com.dj.prachi”);
intent.putExtra(“客户计数”,db.getCustomerCount()+”);
intent.putExtra(“products_count”,db.getProductCount()+”);
LocalBroadcastManager.getInstance(getApplicationContext()).sendBroadcast(intent);
Log.e(“Prachi”,“Stock Transfer数组”+StockTransferList.size());
}
}
}
@凌驾
公共无效失败(错误){
Log.e(“Prachi”,“股票交易错误”+Error.getMessage());
}
});
}
如下所示创建父pojo,并在该pojo中获得响应:
public class ParentPojo extends List<RFResp_GetStockTransferFrLocatn > {
}
公共类ParentPojo扩展列表{
}
您的方法如下所示:
private void getStockTransferFrLocation() {
RestAdapter adapterGetStockTransfer = new RestAdapter.Builder()
.setEndpoint(ROOT_URL) //Setting the Root URL
.build(); //Finally building the adapter
//Creating object for our interface
I_GetStockTransferForLocation api = adapterGetStockTransfer.create(I_GetStockTransferForLocation.class);
api.getStockFrLocation(strCompanyId, strLocationId, strST_date, new Callback<RFResp_GetStockTransferFrLocatn>() {
@Override
public void success(ParentPojo rfResp_getStockTransferFrLocatn, retrofit.client.Response response) {
for(int i=0;i<rfResp_getStockTransferFrLocatn.length;i++){
List<RFResp_GetStockTransferFrLocatn > stockTransferLists= rfResp_getStockTransferFrLocatn.get(i).getStockTransferList();
db = new Database(context);
stckTransferFk = db.getLastStock();
if (stckTransferFk == 0){
stckTransferFk = 1;
}
else{
stckTransferFk = stckTransferFk + 1;
}
if(stockTransferLists.size()>0) {
db = new Database(context);
db.clearStockTransferData();
db.createStockTransfer(rfResp_getStockTransferFrLocatn.getTransferDate(), stockTransferLists,stckTransferFk);
Intent intent = new Intent("com.dj.prachi");
intent.putExtra("customers_count",db.getCustomerCount()+"");
intent.putExtra("products_count",db.getProductCount()+"");
LocalBroadcastManager.getInstance(getApplicationContext()).sendBroadcast(intent);
Log.e("Prachi","Stock Transfer array"+stockTransferLists.size());
}
}
}
@Override
public void failure(RetrofitError error) {
Log.e("Prachi","Stock Transfr Error"+error.getMessage());
}
});
}
private void getStockTransferFrLocation(){
RestAdapter adaptertstocktransfer=new RestAdapter.Builder()
.setEndpoint(根URL)//设置根URL
.build();//最终生成适配器
//为我们的接口创建对象
I_GetStockTransferForLocation api=adapterGetStockTransfer.create(I_GetStockTransferForLocation.class);
api.getStockFrLocation(strCompanyId、strLocationId、str_日期、新回调(){
@凌驾
public void成功(ParentPojo rfResp_getStockTransferFrLocatn,reformation.client.Response){
对于(int i=0;i0){
db=新数据库(上下文);
db.clearStockTransferData();
db.createStockTransfer(rfResp_getStockTransferFrLocatn.getTransferDate(),StockTransferList,stckTransferFk);
意向意向=新意向(“com.dj.prachi”);
intent.putExtra(“客户计数”,db.getCustomerCount()+”);
intent.putExtra(“products_count”,db.getProductCount()+”);
LocalBroadcastManager.getInstance(getApplicationContext()).sendBroadcast(intent);
Log.e(“Prachi”,“Stock Transfer数组”+StockTransferList.size());
}
}
}
@凌驾
公共无效失败(错误){
Log.e(“Prachi”,“股票交易错误”+Error.getMessage());
}
});
}
问题似乎与您如何设置调用I_GetStockTransferForLocation
有关,从代码中似乎期望得到一个对象--RFResp_GetStockTransferFrLocatn
,但实际上,从您发布的json中,您似乎应该得到这些对象的列表
您只需更改I_GetStockTransferForLocation
的定义,使用List
而不是RFResp_GetStockTransferFrLocatn
,就可以了
您还需要将回调从void success(RFResp\u GetStockTransferFrLocatn RFResp\u GetStockTransferFrLocatn,reformation.client.Response)
调整到void success(List RFResp\u GetStockTransferFrLocatn,reformation.client.Response)
如果你看一下你得到的错误-预期的BEGIN_对象,但却是BEGIN_数组-这是gson
的说法,意思是他期望一个对象包含一个json,但实际上它得到了一个对象列表。在您的情况下,这就是接口的工作方式:
public interface I_GetStockTransferForLocation {
@FormUrlEncoded
@POST("/DataAccessService.svc/GetStockTransferForLocation")
void getStockFrLocation(@Field("COMPANY_ID") String companyId,
@Field("LOCATION_ID") String locationId,
@Field("TRANSACTION_DATE") String transactionDate,
Callback<List<RFResp_GetStockTransferFrLocatn>> callback); }
公共接口I_GetStockTransferForLocation{
@FormUrlEncoded
@POST(“/DataAccessService.svc/GetStockTransferForLocation”)
void getStockFrLocation(@Field(“COMPANY_ID”)字符串companyId,
@字段(“位置ID”)字符串位置ID,
@字段(“交易日期”)字符串transactionDate,
回调);}
如果您需要更多帮助,请告诉我。问题似乎与您如何设置调用
I_GetStockTransferForLocation
有关,从代码中可以看到单个对象-RFResp_GetStockTransferFrLocatn
,但实际上,从您发布的json中,您应该可以得到这些对象的列表
您只需更改I_GetStockTransferForLocation
的定义,使用List
而不是RFResp_GetStockTransferFrLocatn
,就可以了
您还需要将回调从void success(RFResp\u GetStockTransferFrLocatn RFResp\u GetStockTransferFrLocatn,reformation.client.Response)
调整到void success(List RFResp\u GetStockTransferFrLocatn,reformation.client.Response)
如果你看一下你得到的错误-预期的BEGIN_对象,但却是BEGIN_数组-这是gson
的说法,意思是他期望一个对象包含一个json,但实际上它得到了一个对象列表。在您的情况下,这就是接口的工作方式:
public interface I_GetStockTransferForLocation {
@FormUrlEncoded
@POST("/DataAccessService.svc/GetStockTransferForLocation")
void getStockFrLocation(@Field("COMPANY_ID") String companyId,
@Field("LOCATION_ID") String locationId,
@Field("TRANSACTION_DATE") String transactionDate,
Callback<List<RFResp_GetStockTransferFrLocatn>> callback); }
公共接口I_GetStockTransferForLocation{
@FormUrlEncoded
@后(“/Dat