Que tal,
Soy nuevo en el desarrollo Android, he comenzado realizando una aplicación que consume un WebService, es bastante sencillo, me ayude de la biblioteca ksoap2-android.
MainActivity.java
Código Java:
Ver originalpackage name.rodmoreno.webservice;
import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.widget.TextView;
import android.widget.EditText;
import android.view.View;
import org.ksoap2.SoapEnvelope;
import org.ksoap2.serialization.SoapObject;
import org.ksoap2.serialization.SoapSerializationEnvelope;
import org.ksoap2.transport.HttpTransportSE;
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
@Override
public boolean onCreateOptionsMenu
(Menu menu
) { // Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
final String SOAP_ACTION
= "urn:webserv"; final String METHOD
= "saludo"; final String NAMESPACE
= "urn:webserv"; final String ENDPOINTWS
= "http://192.168.1.65/servicio.php";
try{
SoapObject userRequest = new SoapObject(NAMESPACE, METHOD);
userRequest.addProperty("nombre", Nombre);
SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
envelope.setOutputSoapObject(userRequest);
HttpTransportSE androidHttpTransport = new HttpTransportSE(ENDPOINTWS);
androidHttpTransport.debug = true;
androidHttpTransport.call(SOAP_ACTION, envelope);
respuesta = envelope.getResponse().toString();
}
e.printStackTrace();
}
return respuesta;
}
public void enviarNombre
(View v
){ TextView textoSalida = (TextView) findViewById(R.id.salida);
EditText textoEntrada = (EditText) findViewById(R.id.entrada);
textoSalida.setText(consumirWS(textoEntrada.getText().toString()));
}
}
activity_main.xml
Código XML:
Ver original<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:paddingBottom="@dimen/activity_vertical_margin"
tools:context=".MainActivity">
<EditText
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:inputType="textPersonName"
android:text="Rodrigo"
android:ems="10"
android:id="@+id/entrada" android:layout_alignParentBottom="true" android:layout_alignParentLeft="true"
android:layout_toLeftOf="@+id/boton"/>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Enviar"
android:id="@+id/boton" android:layout_alignParentBottom="true" android:layout_alignParentRight="true"
android:onClick="enviarNombre"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceLarge"
android:text="Hola..."
android:id="@+id/salida" android:layout_centerVertical="true" android:layout_alignLeft="@+id/entrada"
android:layout_alignRight="@+id/boton"/>
</RelativeLayout>
En el camino me encontré con un problema yo estaba usando la API 16 y no se ejecutaba y leyendo un poco e
ncontré que desde la API 11 en adelante las conexiones debía hacerlas en otro hilo, por ello mi app no funcionaba.
Quisiera saber, como hacer el mismo ejemplo, pero
haciendo la conexión en otro hilo, intenté haciendolo así, pero no conseguí nada.
MainActivity.java
Código Java:
Ver originalpackage name.rodmoreno.webservice3;
import android.os.Bundle;
import android.os.AsyncTask;
import android.app.Activity;
import android.view.Menu;
import android.view.View;
import android.widget.TextView;
import android.widget.EditText;
import org.ksoap2.SoapEnvelope;
import org.ksoap2.serialization.SoapObject;
import org.ksoap2.serialization.SoapSerializationEnvelope;
import org.ksoap2.transport.HttpTransportSE;
public class MainActivity extends Activity {
TextView textoSalida;
EditText textoEntrada;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
textoSalida = (TextView) findViewById(R.id.salida);
textoEntrada = (EditText) findViewById(R.id.entrada);
}
@Override
public boolean onCreateOptionsMenu
(Menu menu
) { // Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
public void botonClick
(View v
){ new consumirWS().execute(textoEntrada.getText().toString());
}
}
public class consumirWS
extends AsyncTask
<String,
Void, Void
> {
final String SOAP_ACTION
= "urn:webserv"; final String METHOD
= "saludo"; final String NAMESPACE
= "urn:webserv"; final String ENDPOINTWS
= "http://192.168.1.65/servicio.php";
protected void onPreExecute(){
}
try{
SoapObject userRequest = new SoapObject(NAMESPACE, METHOD);
userRequest.addProperty("nombre", Nombre);
SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
envelope.setOutputSoapObject(userRequest);
HttpTransportSE androidHttpTransport = new HttpTransportSE(ENDPOINTWS);
androidHttpTransport.debug = true;
androidHttpTransport.call(SOAP_ACTION, envelope);
}
e.printStackTrace();
}
return respuesta;
}
protected void onProgressUpdate
(Void...
values){ }
protected void onPostExecute
(Void result
){ textoSalida.setText(respuesta).toString();
}
}
Con este codigo solo consigo este error:
Gradle:
FAILURE: Build failed with an exception.
* What went wrong:
Execution failed for task ':WebService3:compileDebug'.
> Compilation failed; see the compiler error output for details.
* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output.