Implementar Ice en Android Studio y crear una aplicación sencilla - ASTROINGENIERIA/ASTROUFRO GitHub Wiki
Requisitos
- Software Ice instalado
- Nuevo proyecto en android studio (basic activity)
- Api mayor o igual a 24 (android 7.0 o mayor)
Configurar Gradle
Dirigirse a File->Project Structure. Una vez dentro dirigirse a app ubicada en Modules y luego en Dependencies, clic en add->Library dependency, y buscar "com.zeroc:ice:3.7.1-1".
Crear archivo slice y generar las stubs
Añadir un nuevo package (dentro del directorio java) y nombrarlo como "slice". Le añadimos un nuevo File y escribimos lo siguiente:
// Printer.ice
module Demo
{
interface Printer
{
// A client can invoke this operation on a server.
// In this example we print the string s
void printString(string s);
}
}
Luego, generamos los archivos con el comando slice2java. Para esto, hacer clic derecho sobre el archivo, y después en Open in terminal y escribir el comando.
Modificar clase MainActivity
Para empezar, creamos un nuevo boton que nos servirá para ejecutar un "Hola Mundo" cada vez que se le haga clic. Luego, agregamos la función que nos permitirá ejecutar un "Hola Mundo" en el servidor (Ingrese el n° ip del servidor donde se indica). Para ésto último, creamos una subclase (dentro de MainActivity) que herede de AsyncTask (muy importante!). Finalmente nos debería quedar algo parecido a lo siguiente:
//Clase MainActivity
public class MainActivity extends AppCompatActivity implements View.OnClickListener {
Button btn;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btn=findViewById(R.id.id_btn);
btn.setOnClickListener(this);
}
@Override
public void onClick(View v) {
if (v.getId()==R.id.id_btn){
InternetAsyncTask iat=new InternetAsyncTask();
iat.execute();
}
}
class InternetAsyncTask extends AsyncTask<Void,Void,Void>{
@Override
protected Void doInBackground(Void... voids) {
try (Communicator communicator = Util.initialize()) {
ObjectPrx base = communicator.stringToProxy("SimplePrinter:default -h IngreseIPServidorAqui -p 10000"); //Consulte el numero ip del servidor
PrinterPrx printer = PrinterPrx.checkedCast(base);
if (printer == null) {
throw new Error("Invalid proxy");
}
printer.printString("Hello World");
}
return null;
}
}
}
Para implementar el botón dentro del diseño de vista, nos debemos dirigir a java->res->layout->activity_main.xml y modificar TextLayout por Button y agregarle un id, quedando algo parecido a esto:
//Layout activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<Button
android:id="@+id/id_btn"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hello World!"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</android.support.constraint.ConstraintLayout>
Finalmente, le damos permisos de Internet a la aplicación en manifests->AndroidManifest.xml. Para esto, añadimos los siguiente:
<uses-permission android:name="android.permission.INTERNET"/>
Ejecutar la app
Arranque el servidor y ejecute la aplicación con un emulador o dispositivo con versión de android mayor o igual a 7.0