2016-06-27 6 views
1

Fehler bin immer sagen:ich einige Werte bin Entsendung und in Retrofit-Antwort als Array erhalten, aber Fehler

com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Erwartete BEGIN_OBJECT wurde aber BEGIN_ARRAY in Zeile 1 Spalte 2 Pfad $ in Retrofit

Dies ist meine Funktion:

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()); 
     } 
    }); 
} 

und meine Antwort ist

[ 
    { 
    "StockTransferList": [ 
     { 
     "CLOSING_STOCK_QTY": "0.00", 
     "COMPANY_ID": "7", 
     "LOCATION_ID": "1", 
     "OPENING_STOCK_QTY": "0.00", 
     "STOCKITEM_ID": "12107", 
     "TRANSACION_ID": "0", 
     "TRANSFER_IN_QTY": "0.00" 
     }, 
     { 
     "CLOSING_STOCK_QTY": "0.00", 
     "COMPANY_ID": "7", 
     "LOCATION_ID": "1", 
     "OPENING_STOCK_QTY": "0.00", 
     "STOCKITEM_ID": "12108", 
     "TRANSACION_ID": "0", 
     "TRANSFER_IN_QTY": "0.00" 
     }, 
     { 
     "CLOSING_STOCK_QTY": "30.00", 
     "COMPANY_ID": "7", 
     "LOCATION_ID": "1", 
     "OPENING_STOCK_QTY": "0.00", 
     "STOCKITEM_ID": "12109", 
     "TRANSACION_ID": "0", 
     "TRANSFER_IN_QTY": "30.00" 
     }, 
     { 
     "CLOSING_STOCK_QTY": "0.00", 
     "COMPANY_ID": "7", 
     "LOCATION_ID": "1", 
     "OPENING_STOCK_QTY": "0.00", 
     "STOCKITEM_ID": "12110", 
     "TRANSACION_ID": "0", 
     "TRANSFER_IN_QTY": "0.00" 
     }, 
     { 
     "CLOSING_STOCK_QTY": "0.00", 
     "COMPANY_ID": "7", 
     "LOCATION_ID": "1", 
     "OPENING_STOCK_QTY": "0.00", 
     "STOCKITEM_ID": "12111", 
     "TRANSACION_ID": "0", 
     "TRANSFER_IN_QTY": "0.00" 
     }, 
     { 
     "CLOSING_STOCK_QTY": "30.00", 
     "COMPANY_ID": "7", 
     "LOCATION_ID": "1", 
     "OPENING_STOCK_QTY": "0.00", 
     "STOCKITEM_ID": "12112", 
     "TRANSACION_ID": "0", 
     "TRANSFER_IN_QTY": "30.00" 
     }, 
     { 
     "CLOSING_STOCK_QTY": "0.00", 
     "COMPANY_ID": "7", 
     "LOCATION_ID": "1", 
     "OPENING_STOCK_QTY": "0.00", 
     "STOCKITEM_ID": "12113", 
     "TRANSACION_ID": "0", 
     "TRANSFER_IN_QTY": "0.00" 
     }, 
     { 
     "CLOSING_STOCK_QTY": "0.00", 
     "COMPANY_ID": "7", 
     "LOCATION_ID": "1", 
     "OPENING_STOCK_QTY": "0.00", 
     "STOCKITEM_ID": "12114", 
     "TRANSACION_ID": "0", 
     "TRANSFER_IN_QTY": "0.00" 
     }, 
     { 
     "CLOSING_STOCK_QTY": "0.00", 
     "COMPANY_ID": "7", 
     "LOCATION_ID": "1", 
     "OPENING_STOCK_QTY": "0.00", 
     "STOCKITEM_ID": "12115", 
     "TRANSACION_ID": "0", 
     "TRANSFER_IN_QTY": "0.00" 
     }, 
     { 
     "CLOSING_STOCK_QTY": "0.00", 
     "COMPANY_ID": "7", 
     "LOCATION_ID": "1", 
     "OPENING_STOCK_QTY": "0.00", 
     "STOCKITEM_ID": "12116", 
     "TRANSACION_ID": "0", 
     "TRANSFER_IN_QTY": "0.00" 
     }, 
     { 
     "CLOSING_STOCK_QTY": "0.00", 
     "COMPANY_ID": "7", 
     "LOCATION_ID": "1", 
     "OPENING_STOCK_QTY": "0.00", 
     "STOCKITEM_ID": "12117", 
     "TRANSACION_ID": "0", 
     "TRANSFER_IN_QTY": "0.00" 
     }, 
     { 
     "CLOSING_STOCK_QTY": "0.00", 
     "COMPANY_ID": "7", 
     "LOCATION_ID": "1", 
     "OPENING_STOCK_QTY": "0.00", 
     "STOCKITEM_ID": "12118", 
     "TRANSACION_ID": "0", 
     "TRANSFER_IN_QTY": "0.00" 
     }, 
     { 
     "CLOSING_STOCK_QTY": "0.00", 
     "COMPANY_ID": "7", 
     "LOCATION_ID": "1", 
     "OPENING_STOCK_QTY": "0.00", 
     "STOCKITEM_ID": "12119", 
     "TRANSACION_ID": "0", 
     "TRANSFER_IN_QTY": "0.00" 
     }, 
     { 
     "CLOSING_STOCK_QTY": "0.00", 
     "COMPANY_ID": "7", 
     "LOCATION_ID": "1", 
     "OPENING_STOCK_QTY": "0.00", 
     "STOCKITEM_ID": "12120", 
     "TRANSACION_ID": "0", 
     "TRANSFER_IN_QTY": "0.00" 
     } 
    ], 
    "Transfer_Date": "25/06/2016" 
    } 
] 
+0

zeigen Sie den Klassencode 'RFResp_GetStockTransferFrLocatn' an. Und ich würde vorschlagen, dass Sie Ihre Klassen und Variablen besser benennen :) – x0r

+0

Dieser Fehler wird angezeigt, wenn Sie versuchen, Jsonobject zu erhalten, wenn es kein Objekt ist, aber Array oder wenn Sie versuchen, Array zu erhalten, wenn es Objekt und Array nicht ist. Bitte geben Sie Ihre Datenobjektklasse an, damit wir Ihnen bei der Lösung Ihres Problems helfen können. – Drv

+0

kann nebdy mir bitte helfen –

Antwort

0

Das Problem, wie Sie verwandt zu sein scheint‘ Ich habe den Anruf I_GetStockTransferForLocation, der aus dem Code scheint ein einzelnes Objekt erwarten zu erwarten - RFResp_GetStockTransferFrLocatn, aber in der Tat von der JSON Sie gebucht haben sieht aus wie Sie sollten eine Liste dieser Objekte erhalten.

Sie müssen nur die Definition von I_GetStockTransferForLocation ändern, um List<RFResp_GetStockTransferFrLocatn> statt nur RFResp_GetStockTransferFrLocatn zu verwenden, und Sie sollten in Ordnung sein.

Sie müssen auch die Rückrufe von void success(RFResp_GetStockTransferFrLocatn rfResp_getStockTransferFrLocatn, retrofit.client.Response response) zu void success(List<RFResp_GetStockTransferFrLocatn> rfResp_getStockTransferFrLocatn, retrofit.client.Response response) anpassen.

Wenn man sich die Fehler suchen Sie bekommen - Erwartete BEGIN_OBJECT aber war BEGIN_ARRAY - Es ist gson Art zu sagen, dass er eine json mit einem Objekt wurde erwartet, aber es ist eigentlich eine Liste von Objekten zu bekommen. In diesem Fall würde die Schnittstelle folgendermaßen funktionieren:

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); } 

Lassen Sie mich wissen, wenn Sie weitere Hilfe benötigen.

+0

danke .. ich habe gleich n es hat funktioniert –

0

erstellen Mutter pojo wie unten und erhalten Antwort in diesem pojo:

public class ParentPojo extends List<RFResp_GetStockTransferFrLocatn > { 
} 

Und Ihre Methode wird wie folgt aussehen:

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()); 
    } 
}); 
}