Android 我发布了一些值,并在改型中以数组的形式得到响应,但得到了错误

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

错误说明:

com.google.gson.JsonSyntaxException:java.lang.IllegalStateException:应为BEGIN_对象,但在改装中位于第1行第2列路径$处的BEGIN_数组

这是我的职责:

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