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