在EF中使用存储过程的Android Volley Error Null

问题描述 投票:0回答:1

我正在使用ASP EF构建一个RESTful Api。我的数据库中有一个程序,就是这样:

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

当我在浏览器上调用此方法时(例如“localhost:45896 / api / personals / 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}]

然后,当我尝试使用Volley框架将其连接到我的Android应用程序时:

 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,"NOTHING",Toast.LENGTH_LONG).show();
           Log.d(TAG, "Error Volley: " + error.getMessage());
       }
   });

“newURL”就像上面那样。只需给我“Error Volley:null”,不做任何其他解释。

我真的不知道要修复什么,因为当我使用简单的GET调用时,例如调用它:“http://localhost:45896/api/clientes”,它工作正常,问题是当我想使用SP时。

我知道我做错了什么吗?由于我不知道我的问题实际上在哪里,Idk从哪里开始

android entity-framework stored-procedures asp.net-web-api android-volley
1个回答
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));
  • Volley的默认超时为2500秒。

您可以使用以下改进来避免此问题:

  1. 您需要提高服务器性能
  2. 如果retryCount符合您的应用程序要求,您可以将其设置为1。

谢谢。

© www.soinside.com 2019 - 2024. All rights reserved.