0

我正在使用ASP EF構建的RESTful Api。我在我的數據庫中有一個程序,它是這樣的:使用EF中的存儲過程的Android Volley Error Null

ALTER PROCEDURE [Ventas].[CtasxCobxVendedor] 
@AGE CHAR(1), 
@VENDEDOR VARCHAR(10) 
AS 
BEGIN 
    SET NOCOUNT ON 
    SELECT 
    V.CLIENTE Codigo, 
    C.RazonSocialAnalitico Cliente, 
    C.DireccionAnalitico Direccion, 
    C.TelefonoAnalitico Telefono, 
    V.Gestion, 
    V.IdDos, 
    V.DCTO, 
    V.Factura, 
    V.Fecha, 
    V.Vencimiento, 
    SUM(B.DBB) Monto, 
    SUM(B.HBB) Pagos, 
    SUM(B.DBB-B.HBB) Saldo 
FROM VENTAS.VMAESTRO V 
JOIN VENTAS.CTASXCOBRAR B ON 
    (V.GESTION=B.GESTIONF 
    AND V.AGE =B.AGE 
    AND V.TIPO = B.TIPOF 
    AND V.IDDOS = B.IDDOSF 
    AND V.DCTO = B.DCTOF) 
JOIN VENTAS.vwCLIENTES C ON 
    (V.CLIENTE = C.IdAnalitico) 
WHERE 
-- V.AGE [email protected] 
    V.STA = 'A' 
    AND V.VENDEDOR = @VENDEDOR 
GROUP BY V.CLIENTE,C.RazonSocialAnalitico,C.DireccionAnalitico,C.TELEFONOAnalitico,V.Gestion,V.IdDos,V.DCTO,V.Factura,V.FECHA,V.VENCIMIENTO 
HAVING SUM(B.DBB-B.HBB) > 0.001 
ORDER BY C.RazonSocialAnalitico, V.FECHA, V.DCTO; 
RETURN 0; 
END 

我創建了導入函數和VS上的複合類型。所以這是我得到:

public virtual ObjectResult<CtasxCobxVendedor_Result> CtasxCobrarV(string aGE, string vENDEDOR) 
    { 
     var aGEParameter = aGE != null ? 
      new ObjectParameter("AGE", aGE) : 
      new ObjectParameter("AGE", typeof(string)); 

     var vENDEDORParameter = vENDEDOR != null ? 
      new ObjectParameter("VENDEDOR", vENDEDOR) : 
      new ObjectParameter("VENDEDOR", typeof(string)); 

     return ((IObjectContextAdapter)this).ObjectContext.ExecuteFunction<CtasxCobxVendedor_Result>("CtasxCobrarV", aGEParameter, vENDEDORParameter); 
    } 

然後我試圖調用該SP在我的控制器之一,在這種情況下是我個人的控制器,就像這樣:

public IQueryable<CtasxCobxVendedor_Result1> GetCuenta(string id) 
     { 
     using (NemesisEntities ctx = new NemesisEntities()) { 
     return db.CtasxCobxVendedor("A", id).AsQueryable(); 
     } 
    } 

當我調用此方法在瀏覽器上(這樣的「本地主機:45896/API /交友/ 3329672」,其中「3329672」是個人ID)的作品就好了,因爲它給了我這樣的結果:當我嘗試連接

[{"Codigo":"1018389023","Cliente":"BAREMSA","Direccion":"Av. Cicunvalación - ITOS S/N","Telefono":"","Gestion":"15","IdDos":503,"DCTO":15001980,"Factura":1097,"Fecha":"2015-10-21T00:00:00","Vencimiento":"2015-11-20T00:00:00","Monto":1380.0000,"Pagos":0.0000,"Saldo":1380.0000},{"Codigo":"1018389023","Cliente":"BAREMSA","Direccion":"Av. Cicunvalación - ITOS S/N","Telefono":"","Gestion":"15","IdDos":509,"DCTO":15002329,"Factura":128,"Fecha":"2015-12-09T00:00:00","Vencimiento":"2016-01-08T00:00:00","Monto":1980.0000,"Pagos":0.0000,"Saldo":1980.0000},{"Codigo":"3095060012","Cliente":"BERTHA CONDORI  ORURO","Direccion":"","Telefono":"  25288136","Gestion":"15","IdDos":509,"DCTO":15002349,"Factura":148,"Fecha":"2015-12-11T00:00:00","Vencimiento":"2016-01-10T00:00:00","Monto":1450.0000,"Pagos":0.0000,"Saldo":1450.0000},{"Codigo":"1015777022","Cliente":"CADEXNOR","Direccion":"","Telefono":"","Gestion":"16","IdDos":509,"DCTO":16000384,"Factura":661,"Fecha":"2016-03-09T00:00:00","Vencimiento":"2016-04-08T00:00:00","Monto":1440.0000,"Pagos":0.0000,"Saldo":1440.0000},{"Codigo":"1006965023","Cliente":"COMIBOL","Direccion":"Plaza 6 de Agosto","Telefono":"  68224768","Gestion":"14","IdDos":10,"DCTO":14000142,"Factura":314,"Fecha":"2012-08-03T00:00:00","Vencimiento":"2012-08-08T00:00:00","Monto":2770.0000,"Pagos":0.0000,"Saldo":2770.0000},{"Codigo":"1006965023","Cliente":"COMIBOL","Direccion":"Plaza 6 de Agosto","Telefono":"  68224768","Gestion":"14","IdDos":10,"DCTO":14000143,"Factura":776,"Fecha":"2013-10-03T00:00:00","Vencimiento":"2013-11-02T00:00:00","Monto":2900.0000,"Pagos":0.0000,"Saldo":2900.0000}] 

然後它使用V我的Android應用程序olley框架:

JsonArrayRequest re= new JsonArrayRequest(Request.Method.GET, newURL, (String)null, new Response.Listener<JSONArray>() { 
     @Override 
     public void onResponse(JSONArray response) { 
      Toast.makeText(Cobrar.this,response.toString(),Toast.LENGTH_LONG).show(); 
      procesarRespuesta(response); 
     } 
    }, new Response.ErrorListener() { 
     @Override 
     public void onErrorResponse(VolleyError error) { 
      Toast.makeText(Cobrar.this,"FUCKING NOTHING",Toast.LENGTH_LONG).show(); 
      Log.d(TAG, "Error Volley: " + error.getMessage()); 
     } 
    }); 

其中「newURL」如上所述。只要給我「錯誤排空:空」沒有任何其他解釋。

我真的不知道該怎麼解決,因爲當我使用簡單的GET調用例如調用這個:「http://localhost:45896/api/clientes」,它工作正常,問題是當我想使用SP。

任何想法,我什麼是doind錯了?由於我沒有得到任何有關我的問題的信息,Idk從哪裏開始

回答

1

請檢查這個問題張貼here

我面臨同樣的問題。

爲什麼會發生這種情況?

抽氣,當timeout/socket timeout occurs它會引發錯誤。但是 錯誤對象是null。您可以覆蓋您的Request 類中的兩種方法,以檢查其是否爲timeout

解決方案:

JsonObjectRequest jsonObjectRequest = new JsonObjectRequest(Request.Method.POST, "url", "request", new Response.Listener<JSONObject>() { 
      @Override 
      public void onResponse(JSONObject response) { 

      } 
     }, new Response.ErrorListener() { 
      @Override 
      public void onErrorResponse(VolleyError error) { 

      } 
     }) { 
      @Override 
      protected void deliverResponse(JSONObject response) { 
       super.deliverResponse(response); 
      } 

      @Override 
      public void deliverError(VolleyError error) { 
       super.deliverError(error); 
      } 
     }; 

您可以在上面的代碼deliverError方法得到錯誤。

TimeOut當服務器需要更多時間來響應應用程序,然後在RetryPolicy中定義時發生。

request.setRetryPolicy(new DefaultRetryPolicy(DefaultRetryPolicy.DEFAULT_TIMEOUT_MS * 48, 
       0, DefaultRetryPolicy.DEFAULT_BACKOFF_MULT)); 
  • 默認的超時時間爲2500秒凌空。

您可以通過以下改進避免此問題:

  1. 您需要提高服務器性能
  2. 您可以設置retryCount爲1,如果它適合你的應用需求。

謝謝。

+0

謝謝你這麼多!設置retrycount解決了問題! –

+0

@ Daniel Arteaga Iriarte:我爲這個問題花了很多時間。所以不要讓其他人經歷相同的..! :d – AndiGeeky