CategoriasSin categoria

Nueva charla disponible: Como usar Kotlin DSL para darle superpoderes a tu proyecto de Android.

¡Hola! En octubre tuve la oportunidad de dar una charla en el Android Developer Group de Madrid, sobre cómo utilizar Kotlin DSL para mejorar tu proyecto con Gradle. En este hablé sobre cómo puedes migrar código en Groovy a Kotlin en tus archivos de Gradle y así darle superpoderes al manejo de tu proyecto.

Tambien hablo sobre algunos plugins de Gradle que con Kolin DSL hacen cosas super interesantes. La charla la puedes ver aquí:

Enlace al vídeo de la charla

Este es el enlace al video de todo el evento.

Aprovecho de recordarte, que tenemos nuevo canal de Twitch en el que hablamos de programación y hacemos sesiones de live coding. Te dejo mas información en este enlace.

CategoriasSin categoria

Nuevo canal de Twitch

¡Hola! Quería comentar que desde hace par de semanas he creado un nuevo canal en Twitch en el que tenemos charlas sobre Kotlin y Android. Últimamente estamos también con el LiveCoding de aplicaciones.

Así que si te interesa el mundo del streaming puedes pasarte por allí, también si te pasas por el streaming puedes solicitar unirte a nuestro Discord. Donde tenemos una pequeña comunidad para ayudarnos entre los desarrolladores.

El enlace al canal es este twitch.tv/codingpizza.

Tambíen comentarte que hemos estado creando contenidos para Instagram, unos pequeños carruseles de información sobre Kotlin que siempre son buenos de tener bajo el brazo. El usuario de instagram de codingpizza en instagram, es: instagram.com/codingpizza

Les dejo un ejemplo:

Carousel-1
Carousel-1
Carousel-1

¡Nos vemos por allá!

CategoriasSin categoria

Mi experiencia usando Platzi

Hace poco mas de un año se realizó una conferencia de Platzi en Madrid, donde actualmente vivo. Me pareció interesante el contenido de la charla y fui a verla con mi novia, yo ya había escuchado de Platzi cuando vivía en Venezuela ya que recuerdo cuando un estudiante de la universidad donde yo me gradué fue contratado para ir a Colombia, donde tienen una de sus oficinas.

Freddy Vega dando una charla

¿Qué es Platzi?

Platzi es educación online efectiva, donde sus estudiantes tienen un completion rate del 70% o superior.

Seguramente pensaras que habré buscando en Google esa frase, pero no. Su CEO, Freddy Vega, lo repite tanto que se queda grabada en tu cabeza, además el equipo de marketing es increíble.

Disfruté mucho la charla y al final comentaron que estaban buscando profesores para dar cursos en su plataforma. A mi que siempre me ha gustado compartir las cosas que aprendo me pareció una idea increible y me acerqué a Christian Van der herst, uno de los cofundadores de Platzi, para preguntarle como podría postularme. Él muy amablemente me dió su correo y me pidió que le enviara un mail, al día siguiente ya tenia un correo mío en su bandeja de entrada.

Me piden que haga un video de una clase para ver qué tal es mi contenido y yo encantado, lo hago y lo envio. En ese proceso de crear el video me di cuenta de lo complejo que puede llegar a ser crear un curso de buena calidad, ya que transmitir el conocimiento de forma efectiva y organizada requiere muchos elementos que no había tomado en cuenta, tener el conocimiento no fue suficiente y no fui seleccionado.

En otros sitios probablemente me habrían dicho «muchas gracías, no nos llame mas». Pero en Platzi me dieron feedback, me explicaron que aunque demostraba tener mucho conocimiento debía mejorar en ciertos aspectos y hasta se tomaron el tiempo de recomendarme videos que explicaban como mejorarlos.

Hay cosas que no sabes que no sabes

Un profesor de matemática en mi universidad siempre repetía la famosa frase «Yo solo se que no se nada». Y nunca me había quedado tan claro como en esa oportunidad, así que decidí subscribirme a Platzi y descubrir lo que no sabía. Por menos de un euro al día pague la subscripción anual, fueron aproximadamente 240 euros porque en ese momento había una promoción.

Llevo trabajando como desarrollador Android un poco mas de 4 años y luego de haber trabajado en proyectos de consultoría y productos propios de una empresa, conozco lo que se usa en el mundillo de Android. Así que empece con esto en Platzi a ver que podía agregar a mis habilidades de desarrollador Android.

Esto sería aproximadamente en principios del 2019. Aunque tenían un gran abanico de cursos de frontend y backend, en Android estaban un poco limitados y anticuados respecto al estado del mercado para ese momento. Los cursos usaban componentes casi deprecados, y no utilizaban todavía Kotlin en los cursos de Android. Si bien es cierto que ya tenían un curso de Kotlin específicamente, no lo usaban en los cursos de Android.

Al pasar los meses fueron agregando más cursos en los que sí empezaron a utilizar Kotlin, ConstraintLayouts y patrones de diseño. Si quieres empezar a programar en Android estos son los cursos que yo te recomendaría:

Y esta es la lista de cursos que considero que hacen falta en Platzi sobre android:

  • Curso de Inyección de dependencias con Dagger2.
  • Curso de inyección de dependencias con Koin.
  • Curso de RxJava/RxKotlin en Android.
  • Curso de Apps multimodulos en Android.
  • Curso de Architecture Components en Android. (Ya tienen un curso en el que hablan de Room, LiveData y Navigation Component, pero uno más a fondo de estos tres e incluir WorkManager estaría genial)
  • Curso de Testing en Android Con Mockito o MockK.
  • Curso de Animaciones en Android.

Y estoy esperando en un futuro para cuando este estable el curso de Jetpack Compose 😉.

El verdadero poder de Platzi

Si no sabes a dónde vas, cualquier camino te llevará.

En Platzi tienen el concepto de Rutas, estas rutas no son mas que un conjunto de cursos que debes tomar para llegar a cierto objetivo. Si tu estas empezando a obtener una habilidad de la que no conoces nada, no sabrás por donde empezar. A mi siempre me ha gustado crear cosas y aprender de todo un poco así que he tengo varias rutas en las que voy avanzando poco a poco y hasta ahora he completado 15 cursos.

Cursos completados en Platzi

Mis favoritos han sido:

  1. Curso de Finanzas Personales. Tema que considero deberían enseñar en todas las escuelas.
  2. Curso de Oratoria y hablar en publico. Te ayuda a entender, entre muchas cosas, que no sabemos hacer diapositivas 😂.
  3. Los cursos de Instagram. Si te gusta el tema de redes sociales, estos son increíbles.

Podrás ver en la imágen que algunos cursos tienen una fecha al lado de su nombre, y es porque todos los meses Platzi va sacando cursos nuevos y va actualizando constantemente su contenido. Tambien tengo muchos cursos que he terminado pero no he hecho el examen final del curso 😅.

Otras cosas interesantes de Platzi son sus podcast y una emisión en vivo que hacen los jueves llamada Platzi live, dónde hablan de temas muy interesantes, definitivamente recomendados.

¿Vale la pena?

Para mi, sí. Sobre todo si quieres aprender de temas de los que no conoces y no sabes por dónde empezar. Yo he aprovechado una oferta y he sumado a mi subscripción otro año. Este año quiero terminar la ruta de creación de video 😉. Y si quieres que te regalen un mes gratis, puedes adquirir la subscripción con mi enlace de referidos y así nos dan a ambos un mes gratis.😁

Solo tienes que hacer click aquí.

Eso es todo por ahora y como dice el equipo de Platzi, nunca pares de aprender.

CategoriasSin categoria

Guardar en base de datos con Flutter

Guardar en base de datos con Flutter

Photo by Tim Evans on Unsplash.

Almacenar texto en la base de datos es junto a las llamadas a red, una de las operaciones que como desarrolladores más tenemos que realizar. Algunas veces, necesitamos guardar la información de los servidores en nuestra app para que los usuarios puedan abrir la app y ver información previamente guardada antes de que se actualice con nuevo contenido, o podemos también tener que implementar un modo offline.

En este artículo, vamos a hablar sobre cómo almacenar información en una app con Flutter. Nuestra app será una aplicación que almacenará unas Tareas por realizar (Todo’s), las cuales podremos consultar luego.

Una lista de las cosas que vamos a necesitar:

  • Una clase de Tareas por realizar (De ahora en adelante las llamaremos Todo).
  • Una Screen, la cual es un Widget que nos mostrará unos campos donde podremos crear nuestro Todo.
  • Agregar las dependencias de los paquetes que utilizaremos. Un paquete es lo que en otros lenguajes puede conocerse como librería, nosotros utilizaremos sqflite.
  • Una clase DatabaseHelper la cual se encargará de gestionar la base de datos.

https://www.codingpizza.com/wp-content/uploads/2020/01/Screenshot_1578338767.png

Primero, vamos a crear nuestra clase Todo.

class Todo {
  final int id;
  final String content;
  final String title;
  static const String TABLENAME = "todos";

  Todo({this.id, this.content, this.title});

  Map<String, dynamic> toMap() {
    return {'id': id, 'content': content, 'title': title};
  }
}

Esta es la clase Todo la cual contiene un id, el contenido del Todo y el título. Además, agregamos una constante que incluye el nombre de la tabla de Todos, así como también una función toMap que utilizaremos más adelante.

Con la clase Todo creada, vamos a agregar nuestra dependencia de la siguiente forma en el archivo pubspec.yml.

dependencies:
  flutter:
    sdk: flutter
  sqflite:
  path:

Ahora tenemos que crear nuestra clase DatabaseHelper, la cual tiene la función de tratar con la base de datos.

class DatabaseHelper {
  //Create a private constructor
  DatabaseHelper._();

  static const databaseName = 'todos_database.db';
  static final DatabaseHelper instance = DatabaseHelper._();
  static Database _database;

  Future<Database> get database async {
    if (_database == null) {
      return await initializeDatabase();
    }
    return _database;
  }

  initializeDatabase() async {
    return await openDatabase(join(await getDatabasesPath(), databaseName),
        version: 1, onCreate: (Database db, int version) async {
      await db.execute(
          "CREATE TABLE todos(id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, title TEXT, content TEXT)");
    });
  }
}

Tenemos varias cosas de las que hablar sobre esta clase. Para empezar, acceder a una base de datos es una operación asíncrona, lo que significa que debemos utilizar Futures para inicializar la propiedad database.

En la función initializeDatabase vamos a inicializar una base de datos siempre y cuando no tengamos una ya creada previamente, para inicializarla vamos a llamar la función initializeDatabase y dentro de ella llamaremos a la función openDatabase de la librería de sqflite.

La función openDatabase necesita los siguientes parámetros:

  • Un String que sería el Path de la base de datos. Para esto, debido a que tratamos con sistemas operativos diversos, hay que utilizar la función join() que se encargará de unir los path que vamos a obtener con la función getDatabasesPath().
  • Una función anónima que será ejecutada cuando la base de datos sea creada. En nuestro caso, una función anónima con una query creará una tabla dentro de la base de datos.

La función insertTodo() toma como parámetro un objeto Todo. Obtiene la base de datos que habíamos creado previamente y utiliza la función de la librería sqflite execute() para insertar los datos en nuestra base de datos. A esta función le vamos a pasar los siguientes parámetros.

  • El nombre de la tabla en la cual vamos a insertar la información. En nuestro caso tenemos el nombre declarado como una constante en nuestra clase de Todo.
  • Un map que incluye la información que queremos insertar. Para esto hemos creado la función toMap de nuestra clase Todo que convierte nuestro objeto Todo a un Map.
  • Y una constante definida por la librería que especificará qué acción tomar cuando se encuentre un conflicto. Nosotros vamos a tomar la acción de reemplazar siempre que tenga un conflicto.

Finalmente, podemos crear nuestra Screen la cual nos servirá para crear nuestro Todo object. Dado que los campos serán editables necesitaremos utilizar un StatefulWidget con su respectivo State. Los widgets que vamos a utilizar son Textfields y FloatingActionButton para guardar el Todo.

class CreateTodoScreen extends StatefulWidget {

  @override
  State<StatefulWidget> createState() {
    return _CreateTodoState();
  }
}

class CreateTodoScreen extends StatefulWidget {

  @override
  State<StatefulWidget> createState() {
    return _CreateTodoState();
  }
}

class _CreateTodoState extends State<CreateTodoScreen> {
  final descriptionTextController = TextEditingController();
  final titleTextController = TextEditingController();

  @override
  void dispose() {
    super.dispose();
    descriptionTextController.dispose();
    titleTextController.dispose();
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Retrieve Text Input'),
      ),
      body: Column(
        children: <Widget>[
          Padding(
            padding: const EdgeInsets.all(16.0),
            child: TextField(
              decoration: InputDecoration(
                  border: OutlineInputBorder(), labelText: "Title"),
              maxLines: 1,
              controller: titleTextController,
            ),
          ),
          Padding(
            padding: const EdgeInsets.all(16.0),
            child: TextField(
              decoration: InputDecoration(
                  border: OutlineInputBorder(), labelText: "Description"),
              maxLines: 10,
              controller: descriptionTextController,
            ),
          ),
        ],
      ),
      floatingActionButton: FloatingActionButton(
          child: Icon(Icons.check),
          onPressed: () {
            DatabaseHelper.instance.insertTodo(Todo(
              title: titleTextController.text,
              content: descriptionTextController.text));
            Navigator.pop(context, "Your todo has been saved.");
          }),
    );
  }
}

Luego de crear nuestro State necesitamos utilizar un TextEditingController para cada uno de nuestros TextFields, estos los declaramos al principio de nuestro Widget y hacemos un override de la función dispose() para llamar a la respectiva función dispose de cada TextEditingController.

Al momento de crear nuestros TextFields, le pasamos a cada TextField su respectivo controller. Finalmente, para llamar al DatabaseHelper e indicarle que llame a la función insertTodo debemos pasarle a la propiedad onPressed del floatingActionButton una función anónima con un Todo creado usando el texto obtenido de los TextEditingController.

https://www.codingpizza.com/wp-content/uploads/2020/01/Screenshot_1578338787.png

Actualizando nuestros Todo’s

Para actualizar nuestros Todo’s necesitamos hacer ciertas modificaciones. Primero, vamos a agregar esta nueva función a nuestro DatabaseHelper.

updateTodo(Todo todo) async {
    final db = await database;

    await db.update(Todo.TABLENAME, todo.toMap(),
        where: 'id = ?',
        whereArgs: [todo.id],
        conflictAlgorithm: ConflictAlgorithm.replace);
  }

En esta función obtenemos el objeto database y luego llamamos a la función update() de la librería y le pasamos los siguientes parámetros.

  • El nombre de la tabla que hemos declarado previamente en nuestro objeto Todo.
  • El objeto Todo convertido a un map usando la función toMap.
  • La cláusula where la cual aplicará cambios en cualquier fila que cumpla con esa condición
  • El parámetro whereArgs que sustituirá el signo de interrogación en nuestra cláusula where.
  • Y finalmente, una constante que especifica el tipo de algoritmo a usar en caso de que haya un conflicto.

Ahora debemos actualizar nuestra UI. Primero, vamos a modificar nuestra DetailTodoScreen para poder editar nuestro Todo. Necesitaremos agregar nuestro Todo como un parámetro opcional en el constructor del DetailTodoScreen, luego crear una property Todo en nuestro Widget y debido a que es un StatefulWidget debemos pasarle este Todo al State.

class DetailTodoScreen extends StatefulWidget {
    final Todo todo;

  const DetailTodoScreen({Key key, this.todo}) : super(key: key);

  @override
  State<StatefulWidget> createState() => _CreateTodoState(todo);
}

En nuestro State necesitamos agregar también nuestro Todo al constructor, crear la property Todo y sobrescribir la función initState de nuestro Widget para que podamos asignar el Título y la descripción de nuestro Todo a los respectivos TextField.

class _CreateTodoState extends State<DetailTodoScreen> {
  Todo todo;
  final descriptionTextController = TextEditingController();
  final titleTextController = TextEditingController();

  _CreateTodoState(this.todo);

  @override
  void initState() {
    super.initState();
    if (todo != null) {
      descriptionTextController.text = todo.content;
      titleTextController.text = todo.title;
    }
  }

Finalmente, en la función anónima que le pasamos como parámetro onPressed vamos a llamar a otra función llamada saveTodo, la cual se encargará de insertar un nuevo Todo en caso de que no tengamos ningún Todo para editar o de modificar un Todo existente que hayamos pasado como parámetro a nuestro State. Al final debemos llamar también a la función setState.

Así es como se verá nuestro State luego de esas modificaciones.

class _CreateTodoState extends State<DetailTodoScreen> {
  Todo todo;
  final descriptionTextController = TextEditingController();
  final titleTextController = TextEditingController();

  _CreateTodoState(this.todo);

  @override
  void initState() {
    super.initState();
    if (todo != null) {
      descriptionTextController.text = todo.content;
      titleTextController.text = todo.title;
    }
  }

  @override
  void dispose() {
    super.dispose();
    descriptionTextController.dispose();
    titleTextController.dispose();
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Retrieve Text Input'),
      ),
      body: Column(
        children: <Widget>[
          Padding(
            padding: const EdgeInsets.all(16.0),
            child: TextField(
              decoration: InputDecoration(
                  border: OutlineInputBorder(), labelText: "Title"),
              maxLines: 1,
              controller: titleTextController,
            ),
          ),
          Padding(
            padding: const EdgeInsets.all(16.0),
            child: TextField(
              decoration: InputDecoration(
                  border: OutlineInputBorder(), labelText: "Description"),
              maxLines: 10,
              controller: descriptionTextController,
            ),
          ),
        ],
      ),
      floatingActionButton: FloatingActionButton(
          child: Icon(Icons.check),
          onPressed: () async {
            _saveTodo(titleTextController.text, descriptionTextController.text);
            setState(() {});
          }),
    );
  }

  _saveTodo(String title, String content) async {
    if (todo == null) {
      DatabaseHelper.instance.insertTodo(Todo(
          title: titleTextController.text,
          content: descriptionTextController.text));
      Navigator.pop(context, "Your todo has been saved.");
    } else {
      await DatabaseHelper.instance
          .updateTodo(Todo(id: todo.id, title: title, content: content));
      Navigator.pop(context);
    }
  }
}

Deleting a Todo

Para borrar un Todo necesitamos comenzar por borrar una función de nuestra clase DatabaseHelper.

deleteTodo(int id) async {
    var db = await database;
    db.delete(Todo.TABLENAME, where: 'id = ?', whereArgs: [id]);
  }

Esta función llama a la función delete de la librería Sqflite a la cual le pasamos el nombre de la tabla la cláusula where y el id del Todo a eliminar.

Luego, para agregar una función de borrado en nuestra lista de todos vamos a necesitar realizar los siguientes pasos. Primero, en nuestro ListTile widget vamos a necesitar a utilizar un parámetro opcional llamado trailing, en este parámetro vamos a pasarle un IconButton, dentro de ese parámetro onPressed vamos a pasarle una función anónima que llamará a la función del DatabaseHelper encargada de borrar el Todo.

class  ReadTodoScreen extends StatefulWidget {
  @override
  _ReadTodoScreenState createState() => _ReadTodoScreenState();
}

class _ReadTodoScreenState extends State<ReadTodoScreen> {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Saved Todos'),
      ),
      body: FutureBuilder<List<Todo>>(
        future: DatabaseHelper.instance.retrieveTodos(),
        builder: (context, snapshot) {
          if (snapshot.hasData) {
            return ListView.builder(
              itemCount: snapshot.data.length,
              itemBuilder: (BuildContext context, int index) {
                return ListTile(
                  title: Text(snapshot.data[index].title),
                  leading: Text(snapshot.data[index].id.toString()),
                  subtitle: Text(snapshot.data[index].content),
                  onTap: () => _navigateToDetail(context, snapshot.data[index]),
                  trailing: IconButton(
                      alignment: Alignment.center,
                      icon: Icon(Icons.delete),
                      onPressed: () async {
                        _deleteTodo(snapshot.data[index]);
                        setState(() {});
                      }),
                );
              },
            );
          } else if (snapshot.hasError) {
            return Text("Oops!");
          }
          return Center(child: CircularProgressIndicator());
        },
      ),
    );
  }
}

_deleteTodo(Todo todo) {
  DatabaseHelper.instance.deleteTodo(todo.id);
}

_navigateToDetail(BuildContext context, Todo todo) async {
  Navigator.push(
    context,
    MaterialPageRoute(builder: (context) => DetailTodoScreen(todo: todo)),
  );
}

https://www.codingpizza.com/wp-content/uploads/2020/01/Screenshot_1578338793.png

¡Y eso es todo! Ahora tenemos un app que puede almacenar un Todo, leerlo desde base de datos, actualizarlo y borrarlo.

El código está disponible aquí. Si quieres leer más artículos como estos o tienes alguna duda, puedes encontrarme en las siguientes redes sociales.

Instagram: www.instagram.com/codingpizza
Twitter: www.twitter.com/coding__pizza
Facebook: www.facebook.com/codingpizza
Site: www.codingpizza.com

CategoriasAndroidProgramaciónSin categoria

El camino del desarrollador Android #2 – Hola mundo, Activities y Widgets

Hola mundo, los primeros pasos para todo desarrollador que se encuentra aprendiendo un nuevo lenguaje, un nuevo framework y empezando una nueva aventura con algo nuevo. En este post te hablo de como vamos a crear nuestro primer proyecto de Android Studio y hablaremos de uno de los 4 principales componentes de Android.

Las famosas Activities y que sería de una Activity sin los widgets que la complementan, solo veríamos una pantalla la cual no podríamos hacer mas que cambiar de color.

Los activities son una clase del SDK de Android, como ya mencionaba pueden almacenar muchos widgets inclusive almacenar Fragments (Otro componente de Android, pero del cual hablaremos en otro momento).

¿Qué son los Widgets?

Para hablar de los Widgets necesitamos hablar primero de las View, que son una clase padre que existe en el SDK de android, las cuales tienen muchas clases hijas como lo son los Textview,EditText,ImageView,Button. Todos estos son hijos de la super clase llamada View, estos componentes que son llamados Widgets. Estos widgets pueden modificarse para mostrar el texto que deseamos o la imagen que deseamos mostrar al Usuario, así como cambiar el color del texto o del fondo o decidir si mostrarlos u ocultarlos. Para poder hacer esto, necesitamos asignarle un id para poder identificarlo de los demás.

¿Y dónde se utilizan estos widgets?

Los widgets pueden ser utilizados dentro de un layout. Un layout es un archivo .xml, el cual guarda toda la información de como se verá tu actividad. Toda Activity o Fragment tiene un layout, que es la parte de la Interfaz de Usuario que esta muestra y que además en este se declaran los Widgets. Usualmente, estos suelen tener una estructura jerárquica donde siempre hay un widget que es el Padre y pueden haber varios hermanos.

Ya va, ¿Qué?

Tranquilo, no es tan complicado como parece. Veámoslo en el siguiente código:

Este es un TextView, un widget que muestra el texto que deseamos y le hemos dado las siguientes propiedades:

android:layout_width : Esta propiedad establece la anchura del TextView.
android:layout_height : Esta propiedad esteblece la altura del TextView.
android:text : En esta propiedad establecemos el texto que queremos mostrar a través del TextView.
android:id : En esta propiedad se establece el id del widget para poder acceder a el.

¿No es tan difícil, cierto?, ok ahora vamos a crear un EditText el cual es un campo de texto donde puedes ingresar texto y ademas crearemos un botón para enviar el texto que hemos escrito.

Aparte de estos dos widgets vamos a utilizar un LinearLayout, el cual es un widget que a diferencia de los elementos que mencionamos anteriormente, es hijo de la clase ViewGroup del Android SDK, el cual se utiliza para organizar otras vistas, sea Horizontal o verticalmente. Dentro de este LinearLayout vamos a almacenar nuestro EditText y nuestro Button, quedando de esta manera:

Ok, como te comentaba anteriormente, estos layout XML son utilizados por las clases de android para mostrar la interfaz, así que nos encargamos de declarar nuestro layout en nuestra activity. Cada vez que creas un Activity, el android studio genera por defecto un archivo .xml, en nuestro caso se llama activity_main.xml que es en el cual agregamos los widgets.

El código de tu activity debería verse así:

¡Muéstrame el mensaje!

Ya tenemos definido nuestros Widgets, ahora solo debemos agregar un listener a nuestro botón para que reaccione al tocarlo. De los listener hablaremos en otro tutorial, mientras tanto solo puedo decir que son líneas de código que se ejecutan cuando un evento ocurre.

Para empezar utilizamos el método setOnClickListener del objeto button, luego como parámetro creamos un nuevo onClickListener, el autocompletado del android studio debería ayudarte y este sería el resultado:

Entendido y anotado capitán, pero ahora ¿como hacemos para mostrar un mensaje que diga el nombre?, pues es muy sencillo, te presento a nuestro amigo el Toast, quías si tienes un dispositivo android lo hayas visto antes pues es muy sencillo de utilizar.

Para mostrar un Toast solo debes crearlo de la siguiente forma:

Donde el primer parámetro le puedes pasar un contexto (Esto es un tema que está fuera del alcance de este post, pero del cual hablaremos próximamente).
El segundo parámetro es el mensaje que quieres mostrar al usuario, es decir un String. Y el tercero, es una constante el cual es el tiempo de duración que quieres que dure el toast.
Por último, pero para nada menos importante tenemos el método .show() que es el encargado de mostrar nuestro Toast, sin el no podríamos observar su belleza.

Pero nosotros no queremos mostrar un texto cualquiera, nosotros queremos mostrar el texto que hemos escrito en nuestro EditText, ¿cómo lo obtenemos?. Pues de una manera muy sencilla, utilizando el método .getText de nuestro EditText, quedando así de la siguiente manera:

Que no te asuste el String.valueOf(); el método getText devuelve un objeto del tipo Editable, así que lo que hace este método es transformarlo a un String para que el Toast lo pueda mostrar.

Y con eso tendríamos nuestro resultado:

imagen_final

Puedes saber mas acerca de los Widgets,Activities y Toast en los links que te dejo aquí abajo:

https://developer.android.com/guide/components/activities/index.html

https://developer.android.com/reference/android/widget/Toast.html

https://developer.android.com/reference/android/view/View.html

Y con esto terminamos nuestro Post #2 del Camino del desarrollador Android, comenta debajo sobre que widget quisieras conocer mas y que te interesaría realizar :).

Si te gustó el post no olvides compartirlo en tus redes sociales y ayudar a propagar esta información a personas que quisieran comenzar en el mundo del desarrollo Android.

CategoriasAndroidSin categoria

El camino del desarrollador Android #1 – Instalar Android Studio en Linux

¡Hola! Para estrenar esta sección de nuestro blog pensé en realizar una serie de tutoriales donde veremos como podemos seguir un camino para volvernos un desarrollador Android aprendiendo conceptos y elementos para luego implementarlos en aplicaciones de la vida real. En esta primera versión de esta serie de Post empezaremos hablando de como instalar Android Studio.

Instalar Android Studio en Linux no tiene gran dificultad solo tenemos que instalar Java, descargar el SDK de Android y el IDE el cual sería Android Studio.

Instalar Android Studio en Linux (Debian,Ubuntu,Xubuntu,Kubuntu)

Antes que nada debemos instalar Java el cual lo haremos de la siguiente manera:

  1. Agregar el repositorio de webupd8team.com con el siguiente comando:
    add-apt-repository ppa:webupd8team/java
  2. Actualizar la listas de repositorios
    sudo apt-get update
  3. Instalar Java 8 con el siguiente comando:
    sudo apt-get install oracle-java8-installer
  4. Utilizar el siguiente comando:
    sudo update-alternatives --config java
  5. Ahora agregaremos la variable de entorno $JAVA_HOME al archivo environment de la siguiente manera usamos el comando sudo nano /etc/environment para abrir el archivo y agregamos la siguiente línea
    "JAVA_HOME="/usr/lib/jvm/java-8-oracle/jre/bin/java""
  6. Notificamos los cambios y volvemos a cargar el archivo environment con el comando:
    source /etc/environment

Podemos saber si nuestra variable $JAVA_HOME funciona utilizando:

echo $JAVA_HOME

Y para saber si hemos instalado bien Java usando el comando:

java -version

 

Instalando Android Studio

Hoy en día instalar Android Studio es muy sencillo, solo tienes que descargar el archivo .zip.

Desde aquí

Luego al descargarlo solo tienes que extraer los archivos, dirigirse a la carpeta que acabamos de extraer desde la terminal.

cd android-studio/bin/

luego corremos el archivo .sh del Android Studio

./studio.sh

Seguimos el proceso de instalación seleccionamos la primera opción

Seleccionamos la opción de «Configuración»
Android Studio tutorial imagen 1

Luego seleccionamos los SDK que vamos a descargar

Android Studio tutorial imagen 1

Se abrirá una ventana como la siguiente y comenzara a descargarse los SDK, luego esperamos y al terminar ya podríamos empezar a crear un proyecto con Android Studio.

Android Studio tutorial imagen 1

 

Nuestros amigos de Google y de IntelliJ nos proporcionan actualizaciones del Android Studio desde el mismo programa así que no tienes que preocuparte por repetir este paso una y otra vez.

Si te ha gustado este Post, compártelo en las redes sociales 🙂 y déjanos tu opinión aquí debajo.

Este sitio web utiliza cookies para que usted tenga la mejor experiencia de usuario. Si continúa navegando está dando su consentimiento para la aceptación de las mencionadas cookies y la aceptación de nuestra política de cookies, pinche el enlace para mayor información.

ACEPTAR
Aviso de cookies