Introduce datos en la base de datos desde la aplicación de Android a través del servicio web.

Estoy trabajando en un código de Android que al hacer clic en un botón inserta datos en una base de datos remota a través de un servicio web. Mi código de servicio web es bastante simple. Sólo toma en un parámetro que es el valor de Android Spinner e inserta ese valor en la base de datos

He utilizado HttpClient para la publicación, pero no soy capaz de tener éxito en hacer mi tarea. ¿Puede alguien simplemente ayudarme con este problema?

Aquí está el código de servicio web:

using System; using System.Collections; using System.ComponentModel; using System.Data; using System.Linq; using System.Web; using System.Web.Services; using System.Web.Services.Protocols; using System.Xml.Linq; using System.Data.SqlClient; namespace putdata { /// <summary> /// Summary description for Service1 /// </summary> [WebService(Namespace = "http://tempuri.org/")] [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)] [ToolboxItem(false)] // To allow this Web Service to be called from script, using ASP.NET AJAX, uncomment the following line. // [System.Web.Script.Services.ScriptService] public class Service1 : System.Web.Services.WebService { [WebMethod] public String put(String value) { int count=1; int rows; SqlConnection myConnection = new SqlConnection(@"Data Source=.\SQLEXPRESS;Initial Catalog=student;User ID=sa;Password=123"); try { myConnection.Open(); count++; SqlCommand myCommand = new SqlCommand(); myCommand.Connection = myConnection; myCommand.CommandText = "insert into record values('"+ count +"','" + value + "')"; myCommand.Parameters.Add("@value", SqlDbType.VarChar).Value = value; rows = myCommand.ExecuteNonQuery(); SqlDataReader myReader = myCommand.ExecuteReader(); } catch (Exception ex) { Console.WriteLine(ex.Message); } finally { myConnection.Close(); } return "success"; } } } 

Aquí está mi lógica principal para el código de Android:

  public void onClick(View v) { String spinnerval1=""; String spinnerval2=""; // Perform action on clicks Toast.makeText(Mark.this, "calling web service", Toast.LENGTH_LONG).show(); if (v == findViewById(R.id.button)) { // prepare the dialog box Button progress = (Button) findViewById(R.id.button); progress.setOnClickListener((OnClickListener) Mark.this); HttpClient httpclient = new DefaultHttpClient(); HttpPost httppost = new HttpPost("http://10.0.2.2/enterdata/Service1.asmx"); try { String result; JSONObject obj = new JSONObject(); obj.put("Maths",spinnerval1); obj.put("Science",spinnerval2); ArrayList<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(2); nameValuePairs.add(new BasicNameValuePair("value1", spinnerval1)); nameValuePairs.add(new BasicNameValuePair("value2", spinnerval2)); httppost.setEntity((HttpEntity) new UrlEncodedFormEntity(nameValuePairs)); // Execute HTTP Post Request HttpResponse httpResponse = httpclient.execute(httppost); HttpEntity httpEntity = httpResponse.getEntity(); if (httpEntity != null) { InputStream is = httpEntity.getContent(); result = is.toString(); Log.i("Result is ", "Result: " + result); } } catch (ClientProtocolException e1) { // TODO Auto-generated catch block } catch (IOException e) { // TODO Auto-generated catch block } catch (JSONException e) { // TODO Auto-generated catch block e.printStackTrace(); } ProgressDialog dialog=new ProgressDialog(Mark.this); // make the progress bar cancelable dialog.setCancelable(true); // set a message text dialog.setMessage("Loading..."); dialog.show(); } } 

Aquí está el logcat:

  11-07 12:20:28.970: INFO/ActivityManager(58): Starting activity: Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10000000 cmp=com.example/.Mark } 11-07 12:20:29.361: DEBUG/AndroidRuntime(299): Shutting down VM 11-07 12:20:29.390: DEBUG/dalvikvm(299): Debugger has detached; object registry had 1 entries 11-07 12:20:29.460: INFO/AndroidRuntime(299): NOTE: attach of thread 'Binder Thread #3' failed 11-07 12:20:29.470: INFO/ActivityManager(58): Start proc com.example for activity com.example/.Mark: pid=306 uid=10060 gids={3003, 1015} 11-07 12:20:31.170: INFO/ActivityManager(58): Displayed activity com.example/.Mark: 1809 ms (total 1809 ms) 11-07 12:20:39.341: DEBUG/dalvikvm(127): GC_EXPLICIT freed 1321 objects / 73848 bytes in 161ms 11-07 12:20:40.981: WARN/InputManagerService(58): Window already focused, ignoring focus gain of: com.android.internal.view.IInputMethodClient$Stub$Proxy@45004b40 11-07 12:20:44.440: DEBUG/dalvikvm(201): GC_EXPLICIT freed 109 objects / 9024 bytes in 190ms 11-07 12:20:48.840: INFO/Result is(306): Result: org.apache.http.conn.EofSensorInputStream@44f4a4f8 11-07 12:20:50.490: DEBUG/dalvikvm(260): GC_EXPLICIT freed 759 objects / 54952 bytes in 1185ms 

Ur falta estas líneas más probablemente: (agregue antes de httpclient.execute )

 httppost.setHeader("Accept", "application/json"); httppost.setHeader("Content-type", "application/json"); OR httppost.setHeader("Content-type", "application/x-www-form-urlencoded"); 

Puede que tenga que establecer un tiempo de espera

No ha definido un tipo de contenido para la solicitud

Y yo usaría un manejador de respuestas para una programación más fácil con comando de ejecución

Para ayudar a aislar la causa del problema, haga que el servicio web devuelva "éxito" sin hacer nada más. De esta forma, puede comprobar que la comunicación httpclient con el servicio web funciona correctamente. A continuación, vuelva a agregar la lógica de la base de datos y continúe con la solución de problemas.

Parece que el problema es más probable con su servicio web o con el formato de la base de datos, ya que su código Android parece correcto. Si yo fuera tú, intentaría depurar el servicio web para localizar el problema.

  • ¿Qué authTokenType significa exactamente?
  • Cómo utilizar parámetros con HttpPost
  • Autenticación de Webservice de iPhone y token de acceso
  • ¿Cómo conectar el teléfono de android a un servicio de la tela funcionado en el servidor local?
  • ProgressDialog o ProgressBar ralentiza la aplicación que ejecuta Android 4.1
  • ¿Cómo conectarse a una base de datos remota con Webservices?
  • Bouncy Castle Keystore (BKS): java.io.IOException: Versión incorrecta del almacén de claves
  • ¿Es posible ejecutar un servidor Tomcat y algunas aplicaciones web en un dispositivo Android? (es decir, un comprimido)
  • Cómo llamar a un json webservice a través de android
  • Servicios web de Android con KSOAP2 y HTTPS
  • ¿Cómo funciona la sincronización de datos y cómo la uso en aplicaciones cliente-servidor?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.