0

Im konsumieren eine RESTful Api builded mit ASP EF. Ich habe eine Prozedur in meinem DB, das ist es:Android Volley Fehler Null mit Stored Procedures in EF

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 

Ich erstellte die Importfunktion und den Complex Type VS. Also das ist, was ich habe:

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

Dann versuchte ich in einem meiner Controller diesen SP zu nennen, in diesem Fall ist mein Personal-Controller, wie folgt aus:

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

Wenn ich diese Methode aufrufen auf dem Browser (wie diese „localhost: 45896/api/Kontaktanzeigen/3329672“ where „3329672“ ist das Personal Id) funktioniert gut, weil es mir dieses Ergebnis gibt:

[{"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}] 

Dann, wenn ich versuche, eine Verbindung es zu meiner Android App mit V olley Rahmen:

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

Wo "newURL" wie die oben ist. Gib mir einfach "Error Volley: null" ohne irgendeine andere Erklärung.

Ich weiß wirklich nicht, was zu beheben, Ursache, wenn ich einfache GET Anrufe zum Beispiel aufrufen: "http://localhost:45896/api/clientes", funktioniert es gut, das Problem ist, wenn ich den SP verwenden möchte.

Jede Idee von was mache ich falsch? Da ich keine Informationen darüber, wo mein Problem tatsächlich ist, erhalten, IDK wo

Antwort

1

Bitte überprüfen Sie diese Frage geschrieben here.

Ich habe das gleiche Problem konfrontiert.

Warum das passiert?

In Volley, Wenn timeout/socket timeout occurs es Fehler wirft. aber Fehler Objekt ist null. Sie können zwei Methoden in Ihrer Klasse Request überschreiben, um zu überprüfen, ob sie timeout ist.

Lösung:

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

Sie Fehler auf deliverError Verfahren in obigem Code bekommen.

TimeOut tritt auf, wenn der Server mehr Zeit benötigt, um auf die App zu reagieren, die dann in RetryPolicy definiert ist.

request.setRetryPolicy(new DefaultRetryPolicy(DefaultRetryPolicy.DEFAULT_TIMEOUT_MS * 48, 
       0, DefaultRetryPolicy.DEFAULT_BACKOFF_MULT)); 
  • Standard-Timeout ist 2500 Sekunden, Volley.

Sie können dieses Problem mit folgenden Verbesserungen vermeiden:

  1. Sie benötigen die Serverleistung
  2. Sie können retryCount-1 gesetzt zu verbessern, wenn es Ihre Anwendung Anforderungen entspricht.

Danke.

+0

Vielen Dank !!!! Set retrycount löste das Problem !!! –

+0

@ Daniel Arteaga Iriarte: Ich hatte viel Zeit für dieses Thema verbracht. Also will nicht, dass andere durch dasselbe gehen. !! : D – AndiGeeky

Verwandte Themen