Pregunta

En mi aplicación estoy obteniendo datos usando WebServices. Pero cuando el servidor está inactivo o no en estado activo, proporciona el código de respuesta 500 y mi fuerza de aplicación cierre.

Por favor, guíeme cómo manejar esta condición en mi aplicación. La salida de logCat se muestra a continuación:

12-05 12:17:22.337: V/response code(950): 500
12-05 12:17:22.347: W/System.err(950): org.json.JSONException: A JSONArray text must start with '[' at character 1 of <html>

12-05 12:17:22.347: W/System.err(950):     <head>

12-05 12:17:22.347: W/System.err(950):         <title>Configuration Error</title>

12-05 12:17:22.347: W/System.err(950):         <style>

12-05 12:17:22.347: W/System.err(950):          body {font-family:"Verdana";font-weight:normal;font-size: .7em;color:black;} 

12-05 12:17:22.347: W/System.err(950):          p {font-family:"Verdana";font-weight:normal;color:black;margin-top: -5px}

12-05 12:17:22.347: W/System.err(950):          b {font-family:"Verdana";font-weight:bold;color:black;margin-top: -5px}

12-05 12:17:22.347: W/System.err(950):          H1 { font-family:"Verdana";font-weight:normal;font-size:18pt;color:red }

12-05 12:17:22.347: W/System.err(950):          H2 { font-family:"Verdana";font-weight:normal;font-size:14pt;color:maroon }

12-05 12:17:22.356: W/System.err(950):          pre {font-family:"Lucida Console";font-size: .9em}

12-05 12:17:22.356: W/System.err(950):          .marker {font-weight: bold; color: black;text-decoration: none;}

12-05 12:17:22.356: W/System.err(950):          .version {color: gray;}

12-05 12:17:22.356: W/System.err(950):          .error {margin-bottom: 10px;}

12-05 12:17:22.356: W/System.err(950):          .expandable { text-decoration:underline; font-weight:bold; color:navy; cursor:hand; }

12-05 12:17:22.356: W/System.err(950):         </style>

12-05 12:17:22.356: W/System.err(950):     </head>

12-05 12:17:22.356: W/System.err(950): 

12-05 12:17:22.356: W/System.err(950):     <body bgcolor="white">

12-05 12:17:22.366: W/System.err(950): 

12-05 12:17:22.366: W/System.err(950):             <span><H1>Server Error in '/' Application.<hr width=100% size=1 color=silver></H1>

12-05 12:17:22.366: W/System.err(950): 

12-05 12:17:22.366: W/System.err(950):             <h2> <i>Configuration Error</i> </h2></span>

12-05 12:17:22.366: W/System.err(950): 

12-05 12:17:22.366: W/System.err(950):             <font face="Arial, Helvetica, Geneva, SunSans-Regular, sans-serif ">

12-05 12:17:22.366: W/System.err(950): 

12-05 12:17:22.366: W/System.err(950):             <b> Description: </b>An error occurred during the processing of a configuration file required to service this request. Please review the specific error details below and modify your configuration file appropriately.

12-05 12:17:22.377: W/System.err(950):             <br><br>

12-05 12:17:22.377: W/System.err(950): 

12-05 12:17:22.377: W/System.err(950):             <b> Parser Error Message: </b>Unrecognized attribute 'targetFramework'. Note that attribute names are case-sensitive.<br><br>

12-05 12:17:22.377: W/System.err(950): 

12-05 12:17:22.377: W/System.err(950):             <b>Source Error:</b> <br><br>

12-05 12:17:22.377: W/System.err(950): 

12-05 12:17:22.377: W/System.err(950):             <table width=100% bgcolor="#ffffcc">

12-05 12:17:22.377: W/System.err(950):                <tr>

12-05 12:17:22.377: W/System.err(950):                   <td>

12-05 12:17:22.377: W/System.err(950):                       <code><pre>

12-05 12:17:22.377: W/System.err(950): 

12-05 12:17:22.377: W/System.err(950): Line 30:             &lt;error statusCode=&quot;404&quot; redirect=&quot;filenotfound.htm&quot; /&gt;

12-05 12:17:22.377: W/System.err(950): Line 31:         &lt;/customErrors&gt;

12-05 12:17:22.377: W/System.err(950): <font color=red>Line 32:         &lt;compilation debug=&quot;true&quot; targetFramework=&quot;4.0&quot;&gt;

12-05 12:17:22.396: W/System.err(950): </font>Line 33:          &lt;expressionBuilders&gt;

12-05 12:17:22.396: W/System.err(950): Line 34:                 &lt;add expressionPrefix=&quot;NopResources&quot; type=&quot;NopSolutions.NopCommerce.BusinessLogic.Localization.NopResourceExpressionBuilder, Nop.BusinessLogic&quot; /&gt;</pre></code>

12-05 12:17:22.396: W/System.err(950): 

12-05 12:17:22.396: W/System.err(950):                   </td>

12-05 12:17:22.396: W/System.err(950):                </tr>

12-05 12:17:22.396: W/System.err(950):             </table>

12-05 12:17:22.396: W/System.err(950): 

12-05 12:17:22.396: W/System.err(950):             <br>

12-05 12:17:22.396: W/System.err(950): 

12-05 12:17:22.396: W/System.err(950):             <b> Source File: </b> C:\Websites\balajeebazaar\web.config<b> &nbsp;&nbsp; Line: </b> 32

12-05 12:17:22.396: W/System.err(950):             <br><br>

12-05 12:17:22.396: W/System.err(950): 

12-05 12:17:22.396: W/System.err(950):             <hr width=100% size=1 color=silver>

12-05 12:17:22.407: W/System.err(950): 

12-05 12:17:22.407: W/System.err(950):             <b>Version Information:</b>&nbsp;Microsoft .NET Framework Version:2.0.50727.4963; ASP.NET Version:2.0.50727.4955

12-05 12:17:22.407: W/System.err(950): 

12-05 12:17:22.407: W/System.err(950):             </font>

12-05 12:17:22.407: W/System.err(950): 

12-05 12:17:22.416: W/System.err(950):     </body>

12-05 12:17:22.416: W/System.err(950): </html>

12-05 12:17:22.416: W/System.err(950): <!-- 

12-05 12:17:22.416: W/System.err(950): [ConfigurationErrorsException]: Unrecognized attribute 'targetFramework'. Note that attribute names are case-sensitive. (C:\Websites\balajeebazaar\web.config line 32)

12-05 12:17:22.416: W/System.err(950):    at System.Web.HttpRuntime.HostingInit(HostingEnvironmentFlags hostingFlags)

12-05 12:17:22.416: W/System.err(950): [HttpException]: Unrecognized attribute 'targetFramework'. Note that attribute names are case-sensitive. (C:\Websites\balajeebazaar\web.config line 32)

12-05 12:17:22.416: W/System.err(950):    at System.Web.HttpRuntime.FirstRequestInit(HttpContext context)

12-05 12:17:22.416: W/System.err(950):    at System.Web.HttpRuntime.EnsureFirstRequestInit(HttpContext context)

12-05 12:17:22.416: W/System.err(950):    at System.Web.HttpRuntime.ProcessRequestNotificationPrivate(IIS7WorkerRequest wr, HttpContext context)

12-05 12:17:22.416: W/System.err(950): --><!-- 

12-05 12:17:22.426: W/System.err(950): This error page might contain sensitive information because ASP.NET is configured to show verbose error messages using &lt;customErrors mode="Off"/&gt;. Consider using &lt;customErrors mode="On"/&gt; or &lt;customErrors mode="RemoteOnly"/&gt; in production environments.-->
12-05 12:17:22.426: W/System.err(950):  at org.json.JSONTokener.syntaxError(JSONTokener.java:448)
12-05 12:17:22.426: W/System.err(950):  at org.json.JSONArray.<init>(JSONArray.java:104)
12-05 12:17:22.426: W/System.err(950):  at org.json.JSONArray.<init>(JSONArray.java:150)
12-05 12:17:22.426: W/System.err(950):  at cm.bzaar.CallWebservices.getCategory(CallWebservices.java:48)
12-05 12:17:22.426: W/System.err(950):  at cm.bzaar.CategoryActivity$Loader.doInBackground(CategoryActivity.java:98)
12-05 12:17:22.426: W/System.err(950):  at cm.bzaar.CategoryActivity$Loader.doInBackground(CategoryActivity.java:1)
12-05 12:17:22.436: W/System.err(950):  at android.os.AsyncTask$2.call(AsyncTask.java:185)
12-05 12:17:22.436: W/System.err(950):  at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:256)
12-05 12:17:22.436: W/System.err(950):  at java.util.concurrent.FutureTask.run(FutureTask.java:122)
12-05 12:17:22.436: W/System.err(950):  at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:648)
12-05 12:17:22.436: W/System.err(950):  at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:673)
12-05 12:17:22.436: W/System.err(950):  at java.lang.Thread.run(Thread.java:1060)
12-05 12:17:22.436: W/dalvikvm(950): threadid=17: thread exiting with uncaught exception (group=0x4001aa28)
12-05 12:17:22.446: E/AndroidRuntime(950): Uncaught handler: thread AsyncTask #1 exiting due to uncaught exception
12-05 12:17:22.446: E/AndroidRuntime(950): java.lang.RuntimeException: An error occured while executing doInBackground()
12-05 12:17:22.446: E/AndroidRuntime(950):  at android.os.AsyncTask$3.done(AsyncTask.java:200)
12-05 12:17:22.446: E/AndroidRuntime(950):  at java.util.concurrent.FutureTask$Sync.innerSetException(FutureTask.java:234)
12-05 12:17:22.446: E/AndroidRuntime(950):  at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:258)
12-05 12:17:22.446: E/AndroidRuntime(950):  at java.util.concurrent.FutureTask.run(FutureTask.java:122)
12-05 12:17:22.446: E/AndroidRuntime(950):  at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:648)
12-05 12:17:22.446: E/AndroidRuntime(950):  at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:673)
12-05 12:17:22.446: E/AndroidRuntime(950):  at java.lang.Thread.run(Thread.java:1060)
12-05 12:17:22.446: E/AndroidRuntime(950): Caused by: java.lang.NullPointerException
12-05 12:17:22.446: E/AndroidRuntime(950):  at cm.bzaar.CategoryActivity$Loader.doInBackground(CategoryActivity.java:100)
12-05 12:17:22.446: E/AndroidRuntime(950):  at cm.bzaar.CategoryActivity$Loader.doInBackground(CategoryActivity.java:1)
12-05 12:17:22.446: E/AndroidRuntime(950):  at android.os.AsyncTask$2.call(AsyncTask.java:185)
12-05 12:17:22.446: E/AndroidRuntime(950):  at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:256)
12-05 12:17:22.446: E/AndroidRuntime(950):  ... 4 more

Ver código siguiente:

segmento de código donde se llama a la función para llamar al servicio web:

@Override
        protected Void doInBackground(Void... arg0) {
            CategoryArray = new JSONArray();
            CategoryArray = CW
                    .getCategory("url");

            for (int i = 0; i <= CategoryArray.length() - 1; i++) {
                try {
                    Log.v("category array : ", CategoryArray.getString(i));
                    String[] val = CategoryArray.getString(i).split("•");
                    CategoryID.add(i, val[0]);
                    CategoryList.add(i, val[1]);
                } catch (JSONException e) {
                    e.printStackTrace();
                }
            }
            adapter = new CategoryListAdapter(CategoryActivity.this,
                    CategoryList);
            return null;
        }

función para llamar al servicio web:

public JSONArray getCategory(String URL){

try {
            HttpPost request = new HttpPost(URL);
            request.setHeader("Accept", "application/json");
            request.setHeader("Content-type", "application/json");
            // Send request to WCF service
            DefaultHttpClient httpClient1 = new DefaultHttpClient();
            HttpResponse response = httpClient1.execute(request);
            Log.v("response code", response.getStatusLine().getStatusCode()
                    + "");
            responseCode = response.getStatusLine().getStatusCode();
//          if(responseCode > 200){                   // HERE I WS TRYING TO BREAK THE CODE AND TRYING TO RETURN NULL BT UNABLE TO DO SO
//              CategoryArray = new JSONArray();
//              CategoryArray.put(false);
//              return null;
//          }else{
            HttpEntity responseEntity = response.getEntity();
            // Read response data into buffer
            char[] buffer = new char[(int) responseEntity.getContentLength()];
            InputStream stream = responseEntity.getContent();
            InputStreamReader reader = new InputStreamReader(stream);
            reader.read(buffer);
            stream.close();
            CategoryArray = new JSONArray(new String(buffer));
            Log.v("results length : ", CategoryArray.length() + "");
//          }
        } catch (Exception e) {
            // TODO: handle exception
            e.printStackTrace();
        }
        return CategoryArray;
}

Vea la línea en la que estoy comparando el código de respuesta. Por favor, guíeme sobre cómo puedo romper mi código allí y mostrar UA Toast en UI

¿Fue útil?

Solución

Después de ver el logcat que has publicado, siento que estás obteniendo una cadena JSON como respuesta. Cuando obtenga la respuesta que desea, deberá analizarla.

Entonces, para que no esté retenido después en su código, le estoy ayudando a continuar después de obtener su respuesta dando el siguiente ejemplo del mío:

En uno de mis proyectos, la respuesta que recibí del servicio web fue:

{"CheckRecord": [{"Rollno": "ABC2", "Porcentaje": 40, "Asistido": 12, "perdido": 34}], "Tabla1": []}

Para analizar, hice lo siguiente:

      JSONObject jsonobject = new JSONObject(result);
      JSONArray array = jsonobject.getJSONArray("checkrecord"); 
      int max = array.length();
      for (int j = 0; j < max; j++) 
   {
      JSONObject obj = array.getJSONObject(j);
      JSONArray names = obj.names();

     for (int k = 0; k < names.length(); k++) 
   {
      String name = names.getString(k);
      String value= obj.getString(name);  

   }

Mi jsonobject se ve así:

{"Tabla1": [], "CheckRecord": [{"fallido": 34, "asistido": 12, "porcentaje": 40, "rollNo": "ABC2"}]}

Esto es lo que el @GWA estaba tratando de sugerir. Acabo de darle una muestra de código. Obtenga su resultado primero y determine si es válido.

Espero eso ayude

Salud

Otros consejos

Al mismo tiempo, debe verificar el código de respuesta, mediante el uso de este código, puede averiguar fácilmente si la solicitud ha tenido éxito o fallado debido al servidor hacia abajo o cualquier otro motivo.

Puede verificar el código de estado de respuesta usando:

response.getStatusLine().getStatusCode();

El problema es que está creando un objeto JSON usando una respuesta que está vacía o no representa una cadena JSON.

Por lo tanto, debe crear un objeto JSON basado en su respuesta si:

- the status code is 200
- the response is not empty
- the response starts with '['
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top