[box type=»alert» border=»full»]ATENCION: Este artículo está obsoleto. Google ha dejado de desarrollar el plugin de Android para Eclipse, y ha adoptado Android Studio como nueva herramienta oficial de desarrollo para Android. Te aconsejo que leas el nuevo capítulo dedicado a la creación de una aplicación sencilla en Android Studio.[/box]
Después de instalar nuestro entorno de desarrollo para Android y comentar la estructura básica de un proyecto y los diferentes componentes software que podemos utilizar ya es hora de empezar a escribir algo de código. Y como siempre lo mejor es empezar por escribir una aplicación sencilla.
En un principio me planteé analizar en este capítulo el clásico Hola Mundo pero más tarde me pareció que se iban a quedar algunas cosas básicas en el tintero. Así que he versionado a mi manera el Hola Mundo transformándolo en algo así como un Hola Usuario, que es igual de sencilla pero añade un par de cosas interesantes de contar. La aplicación constará de dos pantallas, por un lado la pantalla principal que solicitará un nombre al usuario y una segunda pantalla en la que se mostrará un mensaje personalizado para el usuario. Así de sencillo e inútil, pero aprenderemos muchos conceptos básicos, que para empezar no está mal.
Por dibujarlo para entender mejor lo que queremos conseguir, sería algo tan sencillo como lo siguiente:
Vamos a partir del proyecto de ejemplo que creamos en un apartado anterior, al que casualmente llamamos HolaUsuario.
Como ya vimos Eclipse había creado por nosotros la estructura de carpetas del proyecto y todos los ficheros necesarios de un Hola Mundo básico, es decir, una sola pantalla donde se muestra únicamente un mensaje fijo.
Lo primero que vamos a hacer es diseñar nuestra pantalla principal modificando la que Eclipse nos ha creado por defecto. Aunque ya lo hemos comentado de pasada, recordemos dónde y cómo se define cada pantalla de la aplicación. En Android, el diseño y la lógica de una pantalla están separados en dos ficheros distintos. Por un lado, en el fichero /res/layout/activity_main.xml tendremos el diseño puramente visual de la pantalla definido como fichero XML y por otro lado, en el fichero /src/paquete.java/MainActivity.java, encontraremos el código java que determina la lógica de la pantalla.
Vamos a modificar en primer lugar el aspecto de la ventana principal de la aplicación añadiendo los controles (views) que vemos en el esquema mostrado al principio del apartado. Para ello, vamos a sustituir el contenido del fichero activity_main.xml por el siguiente:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/LinearLayout1" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <TextView android:id="@+id/LblNombre" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/nombre" /> <EditText android:id="@+id/TxtNombre" android:layout_width="match_parent" android:layout_height="wrap_content" android:inputType="text"> <Button android:id="@+id/BtnHola" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/hola" /> </LinearLayout>
En este XML se definen los elementos visuales que componen la interfaz de nuestra pantalla principal y se especifican todas sus propiedades. No nos detendremos mucho por ahora en cada detalle, pero expliquemos un poco lo que vemos en el fichero.
Lo primero que nos encontramos es un elemento LinearLayout. Los layout son elementos no visibles que determinan cómo se van a distribuir en el espacio los controles que incluyamos en su interior. Los programadores java, y más concretamente de Swing, conocerán este concepto perfectamente. En este caso, un LinearLayout distribuirá los controles simplemente uno tras otro y en la orientación que indique su propiedad android:orientation, que en este caso será “vertical”.
Dentro del layout hemos incluido 3 controles: una etiqueta (TextView), un cuadro de texto (EditText), y un botón (Button). En todos ellos hemos establecido las siguientes propiedades:
- android:id. ID del control, con el que podremos identificarlo más tarde en nuestro código. Vemos que el identificador lo escribimos precedido de “@+id/”. Esto tendrá como efecto que al compilarse el proyecto se genere automáticamente una nueva constante en la clase R para dicho control. Así, por ejemplo, como al cuadro de texto le hemos asignado el ID TxtNombre, podremos más tarde acceder al él desde nuestro código haciendo referencia a la constante R.id.TxtNombre.
- android:layout_height y android:layout_width. Dimensiones del control con respecto al layout que lo contiene. Esta propiedad tomará normalmente los valores “wrap_content” para indicar que las dimensiones del control se ajustarán al contenido del mismo, o bien “match_parent” para indicar que el ancho o el alto del control se ajustará al ancho o alto del layout contenedor respectivamente.
Además de estas propiedades comunes a casi todos los controles que utilizaremos, en el cuadro de texto hemos establecido también la propiedad android:inputType, que indica qué tipo de contenido va a albergar el control, en este caso texto normal (valor “text”), aunque podría haber sido una contraseña (textPassword), un teléfono (phone), una fecha (date), ….
Por último, en la etiqueta y el botón hemos establecido la propiedad android:text, que indica el texto que aparece en el control. Y aquí nos vamos a detener un poco, ya que tenemos dos alternativas a la hora de hacer esto. En Android, el texto de un control se puede especificar directamente como valor de la propiedad android:text, o bien utilizar alguna de las cadenas de texto definidas en los recursos del proyecto (como ya vimos, en el fichero strings.xml), en cuyo caso indicaremos como valor de la propiedad android:text su identificador precedido del prefijo “@string/”. Dicho de otra forma, la primera alternativa habría sido indicar directamente el texto como valor de la propiedad, por ejemplo en la etiqueta de esta forma:
<TextView android:id="@+id/LblNombre" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Escribre tu nombre:" />
Y la segunda alternativa, la utilizada en el ejemplo, consistiría en definir primero una nueva cadena de texto en el fichero de recursos /res/values/strings.xml, por ejemplo con identificador “nombre” y valor “Escribe tu nombre:”.
<resources> . . . <string name="nombre">Escribe tu nombre:</string> . . . </resources>
Y posteriormente indicar el identificador de la cadena como valor de la propiedad android:text, siempre precedido del prefijo “@string/”, de la siguiente forma:
<TextView android:id="@+id/LblNombre" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/nombre" />
Esta segunda alternativa nos permite tener perfectamente localizadas y agrupadas todas las cadenas de texto utilizadas en la aplicación, lo que nos podría facilitar por ejemplo la traducción de la aplicación a otro idioma.Con esto ya tenemos definida la presentación visual de nuestra ventana principal de la aplicación. De igual forma definiremos la interfaz de la segunda pantalla, creando un nuevo fichero llamado activity_saludo.xml, y añadiendo esta vez tan solo una etiqueta (TextView) para mostrar el mensaje personalizado al usuario.
Para añadir el fichero, pulsaremos el botón derecho del ratón sobre la carpeta de recursos /res/layout y pulsaremos la opción “New Android XML file”.
En el cuadro de diálogo que nos aparece indicaremos como tipo de recurso “Layout”, indicaremos el nombre del fichero (con extensión “.xml”) y como elemento raíz seleccionaremos LinearLayout. Finalmente pulsamos Finish para crear el fichero.
Eclipse creará entonces el nuevo fichero y lo abrirá en el editor gráfico, aunque como ya indicamos, nosotros accederemos a la solapa de código para modificar directamente el contenido XML del fichero.
Para esta segunda pantalla el código que incluiríamos sería el siguiente:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <TextView android:id="@+id/TxtSaludo" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="" /> </LinearLayout>
Una vez definida la interfaz de las pantallas de la aplicación deberemos implementar la lógica de la misma. Como ya hemos comentado, la lógica de la aplicación se definirá en ficheros java independientes. Para la pantalla principal ya tenemos creado un fichero por defecto llamado MainActivity.java. Empecemos por comentar su código por defecto:
package net.sgoliver.android.holausuario; import android.os.Bundle; import android.app.Activity; import android.view.Menu; public class MainActivity extends Activity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.activity_main, menu); return true; } }
Como ya vimos en un apartado anterior, las diferentes pantallas de una aplicación Android se definen mediante objetos de tipo Activity. Por tanto, lo primero que encontramos en nuestro fichero java es la definición de una nueva clase MainActivity que extiende a Activity. El único método que modificaremos de esta clase será el método onCreate(), llamado cuando se crea por primera vez la actividad. En este método lo único que encontramos en principio, además de la llamada a su implementación en la clase padre, es la llamada al método setContentView(R.layout.activity_main). Con esta llamada estaremos indicando a Android que debe establecer como interfaz gráfica de esta actividad la definida en el recurso R.layout.activity_main, que no es más que la que hemos especificado en el fichero /res/layout/activity_main.xml. Una vez más vemos la utilidad de las diferentes constantes de recursos creadas automáticamente en la clase R al compilar el proyecto.
Además del método onCreate(), vemos que también se sobrescribe el método onCreateOptionsMenu(), que se utiliza para definir menús en la aplicación. Por el momento no tocaremos este método, más adelante en el curso nos ocuparemos de este tema.
Ahora vamos a crear una nueva actividad para la segunda pantalla de la aplicación análoga a ésta primera, para lo que crearemos una nueva clase FrmSaludo que extienda también de Activity y que implemente el método onCreate() pero indicando esta vez que utilice la interfaz definida para la segunda pantalla en R.layout.activity_saludo.
Para ello, pulsaremos el botón derecho sobre la carpeta /src/tu.paquete.java/ y seleccionaremos la opción de menú New / Class.
En el cuadro de diálogo que nos aparece indicaremos el nombre (Name) de la nueva clase y su clase padre (Superclass) como android.app.Activity.
Pulsaremos Finish y Eclipse creará el nuevo fichero y lo abrirá en el editor de código java.
Modificaremos por ahora el código de la clase para que quede algo análogo a la actividad principal:
package net.sgoliver.android.holausuario; import android.app.Activity; import android.os.Bundle; public class FrmSaludo extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_saludo); } }
NOTA: Todos los pasos anteriores de creación de una nueva pantalla (layout xml + clase java) se puede realizar también mediante un asistente de Eclipse al que se accede mediante el menú contextual “New / Other… / Android / Android Activity”. Sin embargo, he preferido explicarlo de esta forma para que quedaran claros todos los pasos y elementos necesarios.
Sigamos. Por ahora, el código incluido en estas clases lo único que hace es generar la interfaz de la actividad. A partir de aquí nosotros tendremos que incluir el resto de la lógica de la aplicación.
Y vamos a empezar con la actividad principal MainActivity, obteniendo una referencia a los diferentes controles de la interfaz que necesitemos manipular, en nuestro caso sólo el cuadro de texto y el botón. Para ello utilizaremos el método findViewById() indicando el ID de cada control, definidos como siempre en la clase R. Todo esto lo haremos dentro del método onCreate() de la clase MainActivity, justo a continuación de la llamada a setContentView() que ya comentamos:
. . . import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.EditText; . . . public class MainActivity extends Activity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //Obtenemos una referencia a los controles de la interfaz final EditText txtNombre = (EditText)findViewById(R.id.TxtNombre); final Button btnHola = (Button)findViewById(R.id.BtnHola); . . . } } . . .
Como vemos, hemos añadido también varios import adicionales para tener acceso a todas las clases utilizadas.
Una vez tenemos acceso a los diferentes controles, ya sólo nos queda implementar las acciones a tomar cuando pulsemos el botón de la pantalla. Para ello, continuando el código anterior, y siempre dentro del método onCreate(), implementaremos el evento onClick de dicho botón, veamos cómo:
. . . import android.content.Intent; . . . public class MainActivity extends Activity { @Override public void onCreate(Bundle savedInstanceState) { . . . //Obtenemos una referencia a los controles de la interfaz final EditText txtNombre = (EditText)findViewById(R.id.TxtNombre); final Button btnHola = (Button)findViewById(R.id.BtnHola); //Implementamos el evento “click” del botón btnHola.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { //Creamos el Intent Intent intent = new Intent(MainActivity.this, FrmSaludo.class); //Creamos la información a pasar entre actividades Bundle b = new Bundle(); b.putString("NOMBRE", txtNombre.getText().toString()); //Añadimos la información al intent intent.putExtras(b); //Iniciamos la nueva actividad startActivity(intent); } }); } } . . .
Como ya indicamos en el apartado anterior, la comunicación entre los distintos componentes y aplicaciones en Android se realiza mediante intents, por lo que el primer paso será crear un objeto de este tipo. Existen varias variantes del constructor de la clase Intent, cada una de ellas dirigida a unas determinadas acciones. En nuestro caso particular vamos a utilizar el intent para llamar a una actividad desde otra actividad de la misma aplicación, para lo que pasaremos a su constructor una referencia a la propia actividad llamadora (MainActivity.this), y la clase de la actividad llamada (FrmSaludo.class).
Si quisiéramos tan sólo mostrar una nueva actividad ya tan sólo nos quedaría llamar a startActivity() pasándole como parámetro el intent creado. Pero en nuestro ejemplo queremos también pasarle cierta información a la actividad llamada, concretamente el nombre que introduzca el usuario en el cuadro de texto de la pantalla principal. Para hacer esto vamos a crear un objeto Bundle, que puede contener una lista de pares clave-valor con toda la información a pasar entre las actividades. En nuestro caso sólo añadiremos un dato de tipo String mediante el método putString(clave, valor). Tras esto añadiremos la información al intent mediante el método putExtras(bundle).
Con esto hemos finalizado ya actividad principal de la aplicación, por lo que pasaremos ya a la secundaria. Comenzaremos de forma análoga a la anterior, ampliando el método onCreate() obteniendo las referencias a los objetos que manipularemos, esta vez sólo la etiqueta de texto. Tras esto viene lo más interesante, debemos recuperar la información pasada desde la actividad principal y asignarla como texto de la etiqueta. Para ello accederemos en primer lugar al intent que ha originado la actividad actual mediante el método getIntent() y recuperaremos su información asociada (objeto Bundle) mediante el método getExtras().
Hecho esto tan sólo nos queda construir el texto de la etiqueta mediante su método setText(texto) y recuperando el valor de nuestra clave almacenada en el objeto Bundle mediante getString(clave).
package net.sgoliver.android.holausuario; import android.app.Activity; import android.os.Bundle; import android.widget.TextView; public class FrmSaludo extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_saludo); //Localizar los controles TextView txtSaludo = (TextView)findViewById(R.id.TxtSaludo); //Recuperamos la información pasada en el intent Bundle bundle = this.getIntent().getExtras(); //Construimos el mensaje a mostrar txtSaludo.setText("Hola " + bundle.getString("NOMBRE")); } }
Con esto hemos concluido la lógica de las dos pantallas de nuestra aplicación y tan sólo nos queda un paso importante para finalizar nuestro desarrollo. Como ya indicamos en un apartado anterior, toda aplicación Android utiliza un fichero especial en formato XML (AndroidManifest.xml) para definir, entre otras cosas, los diferentes elementos que la componen. Por tanto, todas las actividades de nuestra aplicación deben quedar convenientemente recogidas en este fichero. La actividad principal ya debe aparecer puesto que se creó de forma automática al crear el nuevo proyecto Android, por lo que debemos añadir tan sólo la segunda.
Para este ejemplo nos limitaremos a incluir la actividad en el XML mediante una nueva etiqueta <Activity>, indicar el nombre de la clase java asociada como valor del atributo android:name, y asignarle su título mediante el atributo android:label, más adelante veremos que opciones adicionales podemos especificar. Todo esto lo incluiremos justo debajo de la definición de la actividad principal dentro del fichero AndroidManifest.xml:
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="net.sgoliver.android.holausuario" android:versionCode="1" android:versionName="1.0" > . . . <activity android:name=".MainActivity" android:label="@string/title_activity_main" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <activity android:name=".FrmSaludo" android:label="@string/title_activity_saludo" > </activity> </manifest>
Como vemos, el título de la nueva actividad lo hemos indicado como referencia a una nueva cadena de caracteres, que tendremos que incluir como ya hemos comentado anteriormente en el fichero /res/values/strings.xml
Llegados aquí, y si todo ha ido bien, deberíamos poder ejecutar el proyecto sin errores y probar nuestra aplicación en el emulador.
La forma de ejecutar y depurar la aplicación en Eclipse es análoga a cualquier otra aplicación java, pero por ser el primer capítulo vamos a recordarla.
Lo primero que tendremos que hacer será configurar un nuevo “perfil de ejecución”. Para ello accederemos al menú “Run/ Run Configurations…” y nos aparecerá la siguiente pantalla.
Sobre la categoría “Android Application” pulsaremos el botón derecho y elegiremos la opción “New” para crear un nuevo perfil para nuestra aplicación. En la siguiente pantalla le pondremos un nombre al perfil, en nuestro ejemplo “hola-usuario”, y en la pestaña “Android” seleccionaremos el proyecto que queremos ejecutar.
El resto de opciones las dejaremos por defecto y pasaremos a la pestaña “Target”. En esta segunda pestaña podremos seleccionar el AVD sobre el que queremos ejecutar la aplicación, aunque suele ser práctico indicarle a Eclipse que nos pregunte esto antes de cada ejecución, de forma que podamos ir alternando fácilmente de AVD sin tener que volver a configurar el perfil. Para ello seleccionaremos la opción “Always prompt to pick device”.
Un poco más abajo en esta misma pestaña es bueno marcar la opción “Disable Boot Animation” para acelerar un poco el primer arranque del emulador, y normalmente también suele ser necesario reducir, o mejor dicho escalar, la pantalla del emulador de forma que podamos verlo completo en la pantalla de nuestro PC. Esto se configura mediante la opción “Additional Emulator Command Line Options”, donde en mi caso indicaré la opción “-scale 0.75”, aunque este valor dependerá de la resolución de vuestro monitor y de la configuración del AVD.
Tras esto ya podríamos pulsar el botón “Run” para ejecutar la aplicación en el emulador de Android. Eclipse nos preguntará en qué dispositivo queremos ejecutar y nos mostrará dos listas. La primera de ellas con los dispositivos que haya en ese momento en funcionamiento (por ejemplo si ya teníamos un emulador funcionando) y la siguiente con el resto de AVDs configurados en nuestro entorno. Elegiré en primer lugar el emulador con Android 2.2. Es posible que la primera ejecución se demore unos minutos, todo dependerá de las posibilidades de vuestro PC, así que paciencia.
Si todo va bien, tras una pequeña espera aparecerá el emulador de Android y se iniciará automáticamente nuestra aplicación. Podemos probar a escribir un nombre y pulsar el botón “Hola” para comprobar si el funcionamiento es el correcto.
Sin cerrar este emulador podríamos volver a ejecutar la aplicación sobre Android 4.2 seleccionando el AVD correspondiente. De cualquier forma, si vuestro PC no es demasiado potente no recomiendo tener dos emuladores abiertos al mismo tiempo.
Y con esto terminamos por ahora. Espero que esta aplicación de ejemplo os sea de ayuda para aprender temas básicos en el desarrollo para Android, como por ejemplo la definición de la interfaz gráfica, el código java necesario para acceder y manipular los elementos de dicha interfaz, y la forma de comunicar diferentes actividades de Android. En los apartados siguientes veremos algunos de estos temas de forma mucho más específica.
Podéis consultar online y descargar el código fuente completo de este artículo desde github.
Curso de Programación Android en PDF
¿Te ha sido de utilidad el Curso de Programación Android? ¿Quieres colaborar de forma económica con el proyecto? Puedes contribuir con cualquier cantidad, unos céntimos, unos euros, cualquier aportación será bienvenida. Además, si tu aportación es superior a una pequeña cantidad simbólica recibirás como agradecimiento un documento con la última versión del curso disponible en formato PDF. Sea como sea, muchas gracias por colaborar!
Más información:
274 comentarios
[…] This post was mentioned on Twitter by Babelias, Salva. Salva said: Publicado nuevo post sobre Android. Desarrollando una aplicación Android sencilla (http://www.sgoliver.net/blog/?p=1316) […]
[…] el artículo anterior, donde desarrollamos una sencilla aplicación Android desde cero, ya hicimos algunos comentarios […]
[…] Desarrollando una aplicación Android sencilla […]
He visto un pequeño error sin importancia en la descripción del constructor del Intent en la Activity principal:
«…new Intent(HolaUsuario.this, FrmMensaje.class);»
Dice que «pasaremos al constructor una referencia a la propia actividad llamadora (HolaUsuario.this), y la clase de la actividad llamada (FrmSaludo.class)», cuando la actividad llamada en el constructor se llama FrmMensaje.class.
Es una nimiedad, pero por si querías corregirlo.
¡Gran tutorial para empezar en Android!
Vaya, esto es lo que tiene escribir las cosas a ratos, que un día piensa uno en un nombre para la clase y al día siguiente se piensa en otro. Gracias por el aviso, ahora mismo lo corrijo.
Muy buen tutorial!
Estaba leyendo algunos libros sobre Android y me había perdido con los Intents, pero con tu manual me ha quedado todo muy claro :)
Gracias!!
Cuando escribo un mensaje en la aplicacion, salta el mensaje de error «Lo sentimos, La aplicacion Hola Usuario se hinterrumpido inesperadamente, Intentelo de nuevo»
He probado a crear el codigo, a copiar lo que tienes y a reemplazar con el tuyo, en ambos… mismo error.
Saludos
Se agradece mucho tu tutorial, me había perdido un tanto en lo referente al XML, pero me resulto, había olvidado crear en strings.xml las variables nombre y hola.
Hola!
El tutorial impresionante, me encanta, ya he votado en la encuesta…
Pero a mi me da un error al hacer el «override» del «onclick»: The method onClick(View) of type new View.OnClickListener(){} must override a superclass method
¿alguien puede ayudarme?
Un saludo.
Toni.
Hola!!!
Muy buen tutorial!! mis felicitaciones ;-).
Toni he resuelto el problema que comentas buceando un poco en la red, resulta que en HolaUsuario.java, en la línea btnHola.setOnClickListener(new OnClickListener(){…}), pues no puedes crear ahí directamente el new OnClickListener(){…} tienes que separarlo en unha función.
Pongo a continuación el código de la clase tal y como me funciona a mi:
public class HolaUsuario extends Activity {
/** Called when the activity is first created. */
EditText txtNombre = null;
Button btnHola = null;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
txtNombre = (EditText)findViewById(R.id.TxtNombre);
btnHola = (Button)findViewById(R.id.BtnHola);
btnHola.setOnClickListener(buttonListener);
}
//Error: OnClickListener cannot be resolved to a type
private OnClickListener buttonListener = new OnClickListener()
{
@Override
public void onClick(View arg0) {
Intent intent = new Intent(HolaUsuario.this, FrmMensaje.class);
Bundle bundle = new Bundle();
bundle.putString(«NOMBRE», txtNombre.getText().toString());
intent.putExtras(bundle);
startActivity(intent);
}
};
}
Espero que te sirva de ayuda,
Un saludo!
Juan.
Hola, soy nueva en programación para Android y cuando ejecuto la aplicación una vez he escrito el nombre y le doy al botón hola me salta un mensaje de error «Force Close», ¿alguien me puede decir por qué? Gracias
Hola. Resulta dificil saber cuál puede ser el problema tan sólo con la información que aportas. Parece claro que se trata de una excepción no controlada, pero habría que determinar dónde se produce exactamente. ¿Has probado a depurar paso a paso la aplicación?
Muy buen tutorial,
sin embargo me pasa como a Toni:
The method onClick(View) of type new View.OnClickListener(){} must override a superclass method HelloAndroid.java /HelloAndroid/src/net/sgoliver line 24 Java Problem
con la solución de Juan también. Lo estoy probando con el Eclipse Helios instalado.
¿Alguien podría orientarme por favor?
gracias de antemano
El error que comentáis sobre «The method onClick(View) of type new View.OnClickListener(){} must override a superclass method» se debe probáblemente a que estáis utilizando Java 5.
Como solución, podéis eliminar la anotación @Override previa al método onClick(), o bien utilizar Java 6 y configurarlo convenientemente en las opciones de Eclipse en «Preferences / Java / Installed JREs» y «Preferences / Java / Compiler».
Saludos.
Hola a todos, apenas he empezado hoy con esto de la programación java para android y he editado el archivo main.xml tal y como dice el tutoril, y cuando voy a guardarlo me da fallo en:
y
es decir, cuando lo guardo todo como está arriba, me indica que donde acabo de señalar hay fallos que no se puede poner ni @string/nombre ni @string/hola.
Haber si podeis ayudarme con esto porque puede que sea que no me he dado cuenta de algo anterior y por eso me de fallo.
Saludos y gracias de antemano.
Por cierto, tambien me he fijado, que el código fuente que has puesto para descargar es diferente al del artículo o por lo menos en el archivo main.xml y frmmensaje.xml del artículo no se parece nada al que está para descargar.
Por ejemplo en el código fuente que has puesto para descargar, el arhivo Frmmensaje.xml se llama FrmSaludo.xml y tiene un código distinto.
Un saludo.
A mí me pasa lo mismo que a Jose y Mei. No se muy bien como debuggear esto de Android, pero no se si tiene algo que ver como que pierde la referencia al .jar y hay que darle el path bien??
Hola.
Yo también estoy empezando a aprender a programar un Android y también tenía el mismo error que Mei y alguno más, pero ya lo he resuelto.
La cuestión era que al declarar las variables txtNombre y btnHola para hacer referencia a los controles de la aplicación, lo había hecho como atributos de la clase y el método findViewById() genera la excepción correspondiente.
Si metemos esas dos líneas de código dentro del método onCreate() (Por ejemplo después de la llamada a setContentView()) el problema queda resuelto.
Espero que os sirva de ayuda.
Un saludo.
Excelente tutorial.
[…] idea, lo bueno y normal es hacerse un pequeño tutorial de inicio que dé las bases. Ahí va este: http://www.sgoliver.net/blog/?p=1316. Veamos qué tal va la cosa. Compartir […]
hola,Estoy aprendiendo android, te felicito me parece una guia muy puntual.
=) gracias
estoy empezando en android y me ha servido de mucho tu artículo (en realidad, todo tu blog) quería dejarte los agradecimientos!
Hola, mil gracias por el tutorial. Me sale un error en la línea: setContentView(R.layout.frmsaludo);
Pareciera que frmsaludo no existiera, pero efectivamente si existe, está bajo res.layout. y no tiene errores.
Gracias por su ayuda.
Problema resuelto. Estaba import android.R lo quité y listo. Gracias
Juan, muchas gracias, tu ayuda fue muy oportuna.
Primero mil gracias por la currada de todos estos tutoriales, de verdad.
Tengo un problema, realice el tutorial completo y me da un error al ejecutarlo, para ver si era error mio, ejecuté tu codigo fuente, y me da el mismo error, asi que debo tener mal configurado algo del eclipse, aver si me podeis ayudar. El fallo es el siguiente:
http://i51.tinypic.com/5nu5it.png
Buaahh! Grandes tutoriales… No tenia ni idea de Java, pero tal como lo explicas todo, esto de desarrollar para Android me va ha resultar mucho mas fácil y divertido de lo que inicialmente creía. Gracias por la aportación a la comunidad, ya que apenas hay información en Español tan clara para desarrolladores novatos. Tu blog me va ha servir de gran ayuda. Para empezar ya lo tengo en «favoritos» de mi chrome.
Saludos!!
Felicidades por estes tutoriales! Me están ayudando mucho en el desarrollo de mi aplicación Android. Nada que ver con los libros que circulan por ahí. Te animo a que publiques un libro de programación Android! ;)
El tutorial es muy claro…
Lo lamentable es que a pesar de los medios tecnològicos disponibles,sigamos codificando de una manera tan incoherente…PAra esto, me quedo con -Assembler-, toda la vida.
Demasiadas letras para mi criterio.
Por poner un ejemplo,ya que es rutina pasar argumentos,deberia ser implicito al còdigo.
(Tengo 55 años , pogramo desde los 15)Saludos
Un tutorial muy bueno. Si os da error es porque hay que meter las strings hola y nombre en el fichero strings.xml
Hola!
Estoy empezando con estos tutoriales, y me parece que hay bastante por hacer. Espero proximamente donar algo.
Solo unos detalles por si alguien tiene los mismo problemas que yo.
Yo estoy trabajando con MOTODEV, y no se si en la ID de Eclipse te importa las librerias conforme vas haciendo el codigo, pero conforme iba avanzando tuve q importar varias librerias para q el codigo no me marcara error, aunque reconozco que de esos errores, tuve una buena practica :). Tambien, al editar el HolaUsuario, me marcaba el @override como innecesario, aun asi, mi primera aplicacion en Android corrio perfectamente.
Saludos!
Tutorial a medias, seguido al pie de la letra saltan mil errores. Muy malo.
@maldinibm Tu comentario está completamente fuera de lugar y no tiene ningún valor. En caso de que tengas dudas o no te quede claro algo tienes disponible el código fuente completo al final del artículo, además no cuesta nada preguntar tus dudas, describir los errores que te aparecen por si alguien te puede ayudar, escribirme a mi correo electrónico para consultar… en definitiva, tienes muchas opciones antes de escribir comentarios como el que acabas de hacer. Saludos, y suerte en tu búsqueda de buenos tutoriales.
Yo tengo una duda. Según parece, después de crear el segundo layout, el frmmensaje, hay que crear la clase. Bien, creo la clase, y gracias al wizard de eclipse, le puedo decir que extienda de activity, pero no se cómo indicarle la interfaz que debe tomar.
Gracias.
Una vez creado el layout de la segunda pantalla (frmmensaje.xml), creas una nueva clase que exienda de Activity y en su método onCreate indicas que debe tomar la interfaz del layout frmmensaje en la linea:
setContentView(R.layout.frmmensaje);
Gracias por responder tan pronto. Ya está. Lo que me pasa ahora es la compilación. He mirado en preferencias y tengo el java6, pero he tenido que quitar el Override del onClick para quitarme un error. Ahora me está petando lo de OnClickListener cannot be resolved to a type, así que voy a ver lo que decía Juan más arriba.
Excelente trabajo, gracias amigo.
Buah. Te explico, me faltaba el import android.view.View.OnClickListener; He vuelto a poner el Override en el onClick y compila.
Mi problema es el siguiente: Hice el codigo por mi cuenta y copiando el codigo suyo , pero igualmente me da el mismo error.
Compila perfectamente , pero cuando escribo el texto y le doy al boton , me salta un error que dice:
» The aplication Hola Usuario , (process net.agoliver) has stopped unexpectedly » Please , Tray again
de que puede ser el error ? , he visto que muchos habes tenido problemas con los import de R
yo lo que ice fue importar asi:
import net.agoliver.R;
ya que si no importaba me daba error en R , y me pedia que importara.
Yo he llegado a la conclusion que tiene que ser un error en los paquetes porque no es normal
definitivo: tenía el mismo problema que tu, y al cambiar en Preferences / Java / Compiler a 1.5 ya me funciona… prueba a ver si te va.
sgoliver: muchas gracias por este fantástico tutorial!
Gracias por el tutorial sgoliver. Estoy empezando a programar en Java para android y creo que me va a ayudar a adentrarme un poco en esto.
He seguido los pasos que pones pero me he encontrado con los siguientes problemas que he resuelto mirando los comentarios y el código fuente completo. Te lo comento por si consideras modificar el tutorial para que quede más claro.
1) Hace falta crear un fichero FrmMensaje.java e incluir en él la clase FrmMensaje. Aunque comentas que hay que crear una nueva actividad para FrmMensaje no me había quedado muy claro que lo que había que hacer era crear un nuevo fichero y darle ese nombre.
2) Hace falta incluir los import correspondientes en los .java
3) Hace falta incluir los strings «hola» y «nombre» en el strings.xml. ¿Porqué hay que hacer esto?
4) He tenido que borrar el @Override antes del OnClick para que me compile correctamente.
Hecho esto ya he conseguido que compile y arrancar el simulador, sin embargo no me aparece la aplicación en el simulador. Se queda una pantalla que dice ANDROID y no pasa de ahí. No me aparece ningún tipo de error. ¿Alguna sugerencia?
Hola Willy, tal y como he comentado en otras ocasiones, este curso de Android presupone unos conocimientos previos y consolidados del lenguaje Java. Y los puntos 1, 2 y 4 que comentas tienen más relación con Java que con Android. De cualquier forma te paso mis comentarios cada uno de ellos:
1) Toda clase pública en java debe estar definida en un fichero .java con su mismo nombre.
2) En cada fichero .java se deben añadir siempre los import correspondientes a las clases/paquetes que se vayan a utilizar en su código.
4) Esto es debido simplemente a la versión de java instalada y/o configurada en tu IDE. Yo actualmente utilizo Java 6 y así lo tengo también indicado en las preferencias de Eclipse (Window/Preferences/Java/Compiler). De cualquier forma, como comentas, puedes eliminar el atributo @Override sin problemas.
En cuanto al punto 3, a mitad del artículo, al hablar de la propiedad android:text, comento las dos alternativas que existen a la hora de especificar el texto de un control. De todas formas lo repito también aquí:
1.- puedes indicar el texto directamente (por ejemplo: «hola»)
2.- puedes incluirlo en el fichero «strings.xml» con un identificador único (por ejemplo «ident») y hacer referencia a él posteriormente mediante una cadena del tipo «@string/ident».
Saludos.
Muchas gracias por aclararme las cosas, sgoliver.
Respecto al problema que tengo con el simulador, ¿tienes alguna idea?
Hola,
Primero de todo gracias por el tutorial ;)
A modo curiosidad, el error de forzar el cierre de la aplicación me daba si definía las variables
final EditText txtNombre = (EditText)findViewById(R.id.TxtNombre);
final Button btnHola = (Button)findViewById(R.id.BtnHola);
Antes del método onCreate de HolaUsuario.java (como variables globales). Si las defino dentro del método onCreate, me funciona correctamente.
Alguna idea de pq puede ser esto?
Gracias.
Saludos,
Jordi.
Hola estimado, muchas gracias, muy buenos tutoriales, sin conocer nada de java, se me ha hecho relativamente facil son tu informacion, pero luego de realizado todos los pasos ejecuto la aplicación y me levante el emulador, pero solo dice «android» y no muestra nada de lo que he puesto segun el ejemplo, quien me puede echar una ayuda con este tema.
Muchas gracias.
Hola, la solución al problema del botón es:
public class HolaUsuario extends Activity {
private EditText txtNombre;
private Button btnHola;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
//Localizar los controles
txtNombre = (EditText)findViewById(R.id.TxtNombre);
btnHola = (Button)findViewById(R.id.BtnHola);
btnHola.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
//Creamos el Intent
Intent intent = new Intent(HolaUsuario.this, FrmMensaje.class);
//Creamos la información a pasar entre actividades
Bundle b = new Bundle();
b.putString(«NOMBRE», txtNombre.getText().toString());
//Añadimos la información al intent
intent.putExtras(b);
//Iniciamos la nueva actividad
startActivity(intent);
}
});
}
}
Lo único que cambia es …new View.onClickListener()…..
Saludos y suerte con su desarrollo en Android
Simple y llanamente: gracias sgoliver
Hola!
Geniales los tutoriales, creo que me van a salvar la vida para poder aprender a programar en Android…. mil gracias! :)
El unico problema que encuentro es al intentar correr los codigos de este tuto, me sale un error en la linea del main.xml:
Button android:id=»+id/BtnHola»
el error que me sale es:
Error: No resource found that matchesthe given name (at ‘text’ with value ‘@string/hola’).
Que es lo que tengo que hacer para poder poner esto bien???
Espero vuestras respuestas! mil gracias por adelantado!!!
Hola chicos!
estoy intentando seguir este tutorial, pero no consigo ponerlo a funcionar… :(
despues de seguir todos los pasos y conseguir que no aparezca ningun error en el eclipse, al ejecutar la aplicacion en el movil me salta un aviso:
«La aplicacion HolaUsuario (proceso com.pruebas.lucia) se ha interrumpido inesperadamente.»
Como puedo hacer la depuracion para ver donde falla???
gracias chicos! :)
Muy buen tutorial, al principio no me funcionaba me salia el mismo error que a algunos compañeros: FORCE CLOSE.
Tenia declarados(
final EditText txtNombre = (EditText)findViewById(R.id.TxtNombre);
final Button btnHola=(Button)findViewById(R.id.BtnHola);)
dentro del metodo onClick.
Lo que hoze para que funcionase correctamente fue lo que dijo josedo, declarar los controles fuera del metodo (justo despues de la clase HolaUsuario):
public class HolaUsuario extends Activity {
/** Called when the activity is first created. */
private EditText txtNombre;
private Button btnHola;
@Override
public void onCreate(Bundle savedInstanceState) {
Buenisimo TUTO. Gracias sgoliver y gracias a los ke comentan porke entre todos podemos solucionar cosillas
Saludos
Gracias esta muy bueno el post, saludos desde colombia
Muy buen tutorial, muy muy practico.
En cuanto pueda te hago una donaciçon y asi de paso disfruto del curso en PDF.
tengo problemas con PayPal.
Un saludo
Buenas a todos. Primero dar las gracias por el manual.
Me gustaría, si no es mucho problema, saber el número de ficheros que hay que tocar.
Por lo que he visto hemos tocado HolaUsuario.java, main.xml, frmmensaje.xml y FrmMensaje.java.
¿Alguien podría poner cómo ha quedado el código en cada uno de esos ficheros? Es que yo creo haber seguido los pasos y me da error al iniciar la aplicación.
Un saludo y gracias de antemano
En caso de duda también puedes descargar el código fuente completo del artículo y compararlo con el tuyo. Si sigues teniendo problemas no dudes en escribir otro comentario. Saludos.
Hola, muchas gracias por este tutorial la verdad me está ayudando muchísimo, gracias!
Tengo una duda que tal vez parece bastante tonta (lo es xd) pero sin eso no puedo seguir.
No sé como crear el fichero frmmensaje.xml, y donde ubicarlo, aunque supongo que en la parte de layout por tu explicación.
Un saludo.
Para los que partimos de cero como yo, das muchas cosas por supuestas de antemano. He intentado seguir el curso durante 3 días y sigo estancado en esta página. Así que me voy a buscar otro. Aún así, gracias por tu esfuerzo y dedicación.
Hola John, no das muchos detalles, ¿Qué dudas tienes? ¿Dónde te quedas bloqueado? ¿Son dudas específicas de Android, o del lenguaje Java, o de Eclipse? Tienes disponibles mi dirección de correo electrónico y sobre todo los comentarios del blog, donde cualquier lector te puede ayudar con tus dudas. Saludos.
Hola gracias por el tuto muy bueno, mi problema es que cuando le doy click al boton para pasar al saludo me dice que la aplicacion se ha interrupido inesperadamente y se debe forzar el cierre, trate de seguir paso a paso el codigo y el error se presenta cuando llego a esta linea
startActivity(intent);
auxilio por favor que no se que hacer
el codigo que use es este:
package Android.Hola;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
public class MainActivity extends Activity {
/** Called when the activity is first created. */
private EditText txtNombre = null;
private Button btnHola = null;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
txtNombre = (EditText)findViewById(R.id.TxtNombre);
btnHola = (Button)findViewById(R.id.BtnHola);
btnHola.setOnClickListener(buttonListener);
}
//Error: OnClickListener cannot be resolved to a type
private OnClickListener buttonListener = new OnClickListener()
{
@Override
public void onClick(View arg0) {
Intent intent = new Intent(MainActivity.this, FrmSaludo.class);
Bundle bundle = new Bundle();
bundle.putString(«NOMBRE», txtNombre.getText().toString());
intent.putExtras(bundle);
startActivity(intent);
}
};
}
ya pude solucionar mi problema, el problema era en el manifiesto de la aplicacion el archivo AndroidManifest.xml
faltaba esta linea
ahora mi pregunta seria como generar este archivo correctamente desde netbeans y de forma automatica por que tuve que hacer la correción manual
Holas, muy bueno el articulo. Felicidades.
Io estoy usando Java 6 y aun asi tuve que retirar el override del onClick.
Willy, el emulador tarda bastante en arrancar, io espero al menos 5 minutos hasta que aparece el display del «celular».
Hola, por fin conseguiré pasar página!! Para los que como yo no han tenido bastante con quitar el override y declarar las variables fuera de la función para superar el FORCE CLOSE les aconsejo que miren en el AndroidManifest.xml a ver si tienen estas dos líneas
Las dos me daban errores. La segunda en particular por algún motivo (copiar los archivos del ejemplo con la aplicación ya creada) se borro, y por eso no funcionaba el evento.
saludos y gracias por el tutorial
Muy buen tutorial, lo estoy siguiendo y voy aprendiendo desde 0. MUCHAS GRACIAS!!! :D
Pues me da error al iniciar la aplicacion en el avd
Buen tutorial, muy claro.
Saludos
Hola a todos!
Al compilar se me ha autogenerado un file en res/values/ llamado strings.out.xml, está completamente vacío y me da el siguiente error:
«Multiple annotations found at this line:
– Premature end of file.
– error: Error parsing XML: no
element found»
¿Alguna idea?
Por fin!!!, sin saber ni java ni eclipse, al final el error de exepción en la segunda pantalla era porque AndroidManifest.xml tenia declarada ‘FrmSaludo’ en minusculas.
Gracias por el tutorial, pero hay inconsistencias que hace que alguin que no sepa no pueda avanzar.
Gracias por tu esfuerzo Sgoliver, pero como te decian hace tiempo por ahí arriba, para los que partimos de cero esto se hace imposible. Das ciertas cosas por hecho que nosotros no podemos ni imaginar y nos hablas de la estructura como si ya la conociesemos en profundidad cuando has dado unas nociones básicas.
Llevo todo el día estancado en esta página y es imposible. No se continuar a partir de aquí:
«Para ello utilizaremos el método findViewById() indicando el ID de cada control, definidos como siempre en la clase R:
1 final EditText txtNombre = (EditText)findViewById(R.id.TxtNombre);
2 final Button btnHola = (Button)findViewById(R.id.BtnHola);»
No se ni donde debo pegar esto, ni que es el método que comentas.
Eso sin contar que cuando modifico los archivos que indicas me marca errores que no se si se corrigen solos avanzando o lo estoy haciendo mal…
En fin, gracias por tu esfuerzo, no me considero torpe, pero de aquí no consigo pasar.
Espero que te tomes esto como una crítica constructiva que es lo que pretende ser, y te repito que admiro profundamente tu esfuerzo y trabajo.
Algo que creo que podría ayudar, seria más pantallazos, los que vamos desde cero nos orientamos muchísimo viendo toda la screen del programa, porque podemos ver en que rama o rachivo estas trabajando concretamente.
Gracias y un saludo!
Hola,
Alguien me pega el contenido de androidmanifest? Es que a mi también se me cierra después de poner el nombre y clickar el botón y no sé porqué. Voy a intentar cambiar el androidmanifest a ver si es eso y si no volveré a preguntar. Gracias!
Hola… Quisiera agradecerte por este gran aporte… Te comento que estoy pensando en adquirir algunos libros sobre programacion en android y quisiera que me recomendaras algunos basado en tu experiencia… Me gustaria tambien poder adquirir tu pdf, pero de momento no cuento con tarjeta de credito ni cuenta en paypal o algun otro medio para poderte hacer un aporte, asi que tendre que esperar…
Gracias de antemano…
3:30 am… Acabo de terminar el primer ejemplo y ya quiero seguir con otros… Ademas añadi un boton para regresar a la ventana principal.. xD.. Gracias por el Tuto, muy bueno…
Hola otra vez,
lo que me pasaba a mi es que había escrito OnCreate en vez de onCreate en la segunda activity. Le había quitado el Override y me quedé tan pancha.
Lo dejo aquí escrito por si le pasó a alguien también.
Saludos.
Para los que les pasa el error de forzar el cierre de la aplicación, ya he encontrado el error y es que en la actividad HolaUsuario al final se cerraron mal las llaves.
El final de la actividad debe quedar así:
}
}
);
}
}
Espero les sirva. A mi me funcionó.
El mejor hola mundo de android en español en la web Gracias
hola!!! muy buen tutorial.. tiene un par de detalles a corregir en el código pero son bastantes fáciles de solucionar y te ayudan a aprender mas…
gracias!!!!!!!!!
Hola,
muchas gracias por este tutorial. Me he atascado.
Al ejecutar el proyecto me dice que contiene errores que debo solucionar antes. He importado tu proyecto y me dice lo mismo (aunque con menos errores). Los errores que aparecen abajo son estos:
Description Resource Path Location Type
The project was not built since its build path is incomplete. Cannot find the class file for java.lang.Object. Fix the build path then try building this project HolaUsuario Unknown Java Problem
The type java.lang.Object cannot be resolved. It is indirectly referenced from required .class files HolaUsuario.java /HolaUsuario/src/net/sgoliver line 1 Java Problem
Unable to resolve target ‘android-4’ HolaUsuario Unknown Android Target Problem
Aunque luego hay varias marcas de error en varias lineas.
Sé que es poca información pero, ¿me puedes ayudar?
Muchas gracias.
Saludos. Álvaro.
Hola Alvaro,
por la información que me das me parece que no tienes bien configurado el entorno de desarrollo para desarrollar en Android, o bien que no estás importando el proyecto correctamente.
¿Utilizas Eclipse? ¿qué versión? ¿Has seguido los pasos del primer tutorial anterior para configurarlo todo correctamente?
Al margen de estas preguntas te animo a que hagas tu consulta en el nuevo foro de la web, por si otros usuarios también pueden ayudarte.
Saludos.
Buenas,
Tengo una duda, y no sé cómo resolverla.
Por ejemplo tenemos este código:
final EditText txtNombre = (EditText)findViewById(R.id.TxtNombre);
Con este código solo me aparece un campo del formulario el de Nombre, pero si quiero añadir más campos en el formulario no puedo declarar la variable final más de una vez, por ejemplo:
final EditText txtNombre = (EditText)findViewById(R.id.TxtNombre);
final EditText txtCodigo = (EditText)findViewById(R.id.editCodigo);
final EditText txtFecha = (EditText)findViewById(R.id.editFecha);
Cómo declaro la variable «final» para que se aplique a todos los EditText.
Hola Sebastian, «final» no es el nombre de ninguna variable, sino tan sólo un modificador aplicado a las verdaderas variables, que son: txtNombre, txtCodigo y txtFecha. No hay ningún problema en utilizar el modificador «final» en todas ellas, puedes definir tantas como quieras de la forma que tú has escrito:
final EditText txtNombre = (EditText)findViewById(R.id.TxtNombre);
final EditText txtCodigo = (EditText)findViewById(R.id.editCodigo);
final EditText txtFecha = (EditText)findViewById(R.id.editFecha);
¿Qué error te da el compilador si lo haces así?
Saludos.
Hola llevaba una semanilla con androi y viendo tutoriales y al llegar a los intents me habia perdido mucho pero la verdad que tu forma de enseñarlo me ha gustado y he conseguido entender mas o menos como funciona. Muchas gracias y animo a que si puedes sigas con esto porque a mucha gente como yo que no sabemos casi nada de esto les ayudas mucho.
Un saludo
Muchas Gracias loco! Me esta ayudando bastante tu tutorial, muy bueno. Gracias nuevamente! Muchos exitos!
Gracias, muy bien explicado, me ha sido de gran utilidad
Hola, he seguido todo y la única duda que me queda es en esta línea:
android:text=»$mensaje»>
Porqué se pone el dólar?
Gracias, un saludo.
Hola Pablo, el dolar no significa nada, puedes poner lo que quieras o incluso dejarlo en blanco. Yo lo suelo poner simplemente para diferenciar los textos «de verdad» de los que están ahí sólo para ver cómo quedan en la interfaz. Piensa que ese mensaje lo vas a sobreescribir siempre con un mensaje personalizado. Saludos.
Hola, me he puesto con tu tuto y me parece muy bueno. Despues de mi alabanza bien merecida, te expongo mi problema:
El código lo compilo con la API 2.2 y eclipse helios 6 (creo)
El tema está en que el compilador no me muestra errores, pero al ejecutar, el log me da esto:
12-29 09:27:24.078: W/dalvikvm(596): threadid=1: thread exiting with uncaught exception (group=0x4001d800)
12-29 09:27:24.127: E/AndroidRuntime(596): FATAL EXCEPTION: main
12-29 09:27:24.127: E/AndroidRuntime(596): java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{android.hola.usuario/android.hola.usuario.HolaUsuario}: java.lang.NullPointerException
12-29 09:27:24.127: E/AndroidRuntime(596): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2585)
12-29 09:27:24.127: E/AndroidRuntime(596): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679)
12-29 09:27:24.127: E/AndroidRuntime(596): at android.app.ActivityThread.access$2300(ActivityThread.java:125)
12-29 09:27:24.127: E/AndroidRuntime(596): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033)
12-29 09:27:24.127: E/AndroidRuntime(596): at android.os.Handler.dispatchMessage(Handler.java:99)
12-29 09:27:24.127: E/AndroidRuntime(596): at android.os.Looper.loop(Looper.java:123)
12-29 09:27:24.127: E/AndroidRuntime(596): at android.app.ActivityThread.main(ActivityThread.java:4627)
12-29 09:27:24.127: E/AndroidRuntime(596): at java.lang.reflect.Method.invokeNative(Native Method)
12-29 09:27:24.127: E/AndroidRuntime(596): at java.lang.reflect.Method.invoke(Method.java:521)
12-29 09:27:24.127: E/AndroidRuntime(596): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
12-29 09:27:24.127: E/AndroidRuntime(596): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
12-29 09:27:24.127: E/AndroidRuntime(596): at dalvik.system.NativeStart.main(Native Method)
12-29 09:27:24.127: E/AndroidRuntime(596): Caused by: java.lang.NullPointerException
12-29 09:27:24.127: E/AndroidRuntime(596): at android.app.Activity.findViewById(Activity.java:1637)
12-29 09:27:24.127: E/AndroidRuntime(596): at android.hola.usuario.HolaUsuario.(HolaUsuario.java:15)
12-29 09:27:24.127: E/AndroidRuntime(596): at java.lang.Class.newInstanceImpl(Native Method)
12-29 09:27:24.127: E/AndroidRuntime(596): at java.lang.Class.newInstance(Class.java:1429)
12-29 09:27:24.127: E/AndroidRuntime(596): at android.app.Instrumentation.newActivity(Instrumentation.java:1021)
12-29 09:27:24.127: E/AndroidRuntime(596): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2577)
12-29 09:27:24.127: E/AndroidRuntime(596): … 11 more
He revisado toco con lupa, solo se me ocurre que sea la API de java. ¿Que me cuentas master?
Gracias
Hola David, no muestras el código que estás intentando ejecutar, por lo que poco te puedo decir. Si nos das más información podemos volver a intentarlo.
De cualquier forma, te animo aque este tipo de problemas los expongas en el nuevo foro de la web, así otros usuarios también pueden ayudarte.
Saludos.
Hola, creo que ya lo he expuesto en el foro principal, no obstante, te comento:
Creo que el fallo no proviene del código, sino de algo que se auto genera, ya que he intentado hacer una aplicación parecida, una pantalla que llama a otra, y me ha dado el mismo error, a parte, cuando suprimo los cambios y dejo el código como al principio, sigue dandome el error al ejecutar. Solo use Intent, View y OnClickListener. ¿Se te ocurre algo?
Tema resuelto. Gracias. la explicación a mi problema me la han resuelto aqui http://www.sgoliver.net/foro/viewtopic.php?f=5&t=92
si has tenido el mismo problema hay biene la solución y la explicación de porque ocurre.
Gracias a todos
Por que pones a las variables el modificador final? hay algun motivo para usarlas o es simplemente por «capricho».
Venga, lo que necesitaba para entender los intent’s . En hora buena Gracias por la colaboración.
En primer lugar felicitaciones i agradecimientos por este tutorial
Tengo dos errores:
El primero en la que me dfine el error como:
tag appears after tag
y el segundo en <EditText android:id="@+id/TxtNombre" definido como :
This text field does not specify an inputType or a hint.
Agradeceria ayuda con esto.
Ademas he observado que en las fuentes no esta el archivo frmmensaje.xml y tampoco se indica la ubicacion de las lineas :
final EditText txtNombre = (EditText)findViewById(R.id.TxtNombre);
final Button btnHola = (Button)findViewById(R.id.BtnHola);
que tambien pedia otro usuario.
Gracias por todo.
Veo que a la gente le da problemas y a mi me los dará tambien pero por ahora
tengo leña para el fuego gracias a esto.
Será quizás una tontería lo que digo pero » package=»net.sgoliver» » en esa linea si hacemos copy paste nos cascará la aplicación y supongo que el archivo xml habrá que definirlo en orden debajo el main.xml … No sé si es suponer demasiado.
En cualquier caso reiterar mi agradecimiento.
Primero felicitarte por su aporte. Y ahora una pregunta.
He realizado el ejemplo, pero en la segunda pantalla he puesto un botón para volver a la primera, pero cuando vuelvo el edittext esta vacío, ¿como se podría hacer para que aparezca el último contenido que se haya introducido?
Gracias
Hola, muy interesante, muchas gracias es el mejor tutorial que he consultado.
Es posible que me indiques como pasar el programa creado a mi dispositivo móvil para probarlo allí?
Muchas gracias por el tutorial! Excelente para los que comenzamos desde cero :D
Buenas. Ante todo gracias por el tutorial, pero quisiera exponer mi problema, y es que no me genera la clase R.
Gracias
Hola Diego, eso suele ser debido a algún error en alguno de los layout XML. ¿Estás utilizando directamente el XML que proporciono con el código fuente, o lo has escrito tú desde cero o le has realizado alguna modificación? Revisa que no haya ningún error en esos ficheros.
me da error el fichero main.xml, en las lineas android:text=»..»
los he revisado y no veo que haya algún problema, también tengo que pulsar el botón menu del emulador para que ejecute la aplicación, en este caso la de los ficheros que has dejado
Esto es desesperante, le he dado mil vueltas, he reescrito el codigo muchas veces, en el orden del tutorial, y ahora encima, el proyecto importado de los ficheros que has proporcionado no lo inicia el emulador
Hola Diego, por que no expones tu problema en el foro y nos adjuntas el código que te da error para que así podamos intentar saber que está ocurriendo. Saludos.
que tal, este codigo donde va?
1final EditText txtNombre = (EditText)findViewById(R.id.TxtNombre);
2final Button btnHola = (Button)findViewById(R.id.BtnHola);
Hola Cristian, al final del artículo tienes disponible el código fuente completo, que puedes cargar directamente en Eclipse para estudiarlo cómodamente.
Muy bueno el artículo, solo una duda que no me quedó claro:
¿Donde se especifica el texto que va en el TextView y en el botón?? (el que pone «Escribe tu nombre» por ejemplo) Me está volviendo loco, no se donde lo has puesto.
Hola, tengo 2 errores que me detienen en HolaUsuario.java
1.- «The value of the local variable txtNombre is not used»
Codigo
final EditText txtNombre = (EditText)findViewById(R.id.TxtNombre);
2.- «The method onClick(View) of type new View.OnClickListener(){} must override a superclass method »
Codigo
public void onClick(View v) {
Un error en Androidmanifest.xml
Error: No resource type specified (at ‘icon’ with value ‘@drawable’).
Codigo
<application android:icon="@drawable/icon"
ya lo solucioné, en HolaUsuario.java eliminé @Overrideque estaba de más y en androidmanifest.xml cambié @drawable/icon por @drawable/ic_launcher y listo!
cuando corro la aplicacion me da un error en el emulador «la aplicacion HolaUsuario(proceso mejacor.net) se ha interrumpido inesperadamente. intentalo de nuevo»
bueno mis panas, este tutorial esta como manda la ley, a ver si con estos aprendizajes consigo trabajo, me encanta esto….
Ola…cuando dices crear un njuevo fichero frmmensaje.xml. En Eclipse voy a File New….????
Y en que carpeta lo creo?…..al crearlo en la misma carpeta del main.xml, sale un build error, que tambien afecta el main.xml y a pesar que elimine el archivo frmmensaje.xml, no soy capaz de corregir el archivo y toca volver a empezar…
Podrias ayudarme….el que no pregunta no aprende…
Aprovecho para felicitarte y agradecerte el esfuerzo de este curso, desde colombia.
Ricardo
Hola estuve probando tu codigo y me da un un error :
R cannot be resolved to be a variable…. a que se debe? tengo exactamente igual que tu codigo. Gracias por la ayuda! :D
Esta muy bien, gracias. Sorprenderé a mi novia personalizando una sencilla aplicación para el celular, este 14, pero en realidad el sorprendido seré yo.
Disculpa pero estaria bueno que digas en que parte va cada codigo fuente porque yo por ejemplo no se donde poner
final EditText txtNombre = (EditText)findViewById(R.id.TxtNombre);
final Button btnHola = (Button)findViewById(R.id.BtnHola);
Hola Nicolás, intentaré dejarlo algo más claro, pero de cualquier forma al final del artículo puedes descargar el código fuente completo, donde puedes consultar dónde va cada cosa. Saludos.
Buenas hay algo que yo no logro entender, en donde colocas el texto «Escribe tu nombre:» el cual muestar la etiqueta de la primera activity. He releido el articulo y no logro encontrar donde le pasa este valro a la etiqueta.
Estan geniales tus articulos. Gracias por compartirlos.
A mi me pasa lo mismo que a Ricardo Vallejo al crear el archivo en la carpeta del main.xml.
Exelente articulo Saludos!!
Hay partes que nose que hacer, ya que necesito modificar partes del fichero «R» y no me deja, por ejemplo al poner este codigo «R.layout.frmmensaje» me dice que debo ponerlo en el R y si pongo a mano lo que tu tienes en el código de R.java (public static final int frmsaludo=0x7f030000;) me sale este error » R.java was modified manually! Reverting to generated versión!»
Agradecería tu ayuda!
Y Gracias por este grande tutorial!
Gustavo eso tienes que ponerlo en res/values/string.xml allí pones el nombre del String y luego la frase que quieres que contenga (Escribe tu nombre:) en el código fuente que esta subido puedes verlo
el tutorial está bueno, sin embargo falta aclarar algunas cosas en cuanto al código:
primero: olvidó poner las clases a importar: (Estas son las que van en HolaUsuario.java)
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.EditText;
import android.widget.Button;
——————————————————————
el código de HolaUsuario.java quedaría algo así(yo cambié los id de mis controles:)
package hola.usuario;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
public class HolaUsuario extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
final EditText txtNombre = (EditText)findViewById(R.id.editText1);
final Button btnHola = (Button)findViewById(R.id.button1);
btnHola.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
Intent intent = new Intent(HolaUsuario.this, FrmMensaje.class);
Bundle bundle = new Bundle();
bundle.putString(«NOMBRE», txtNombre.getText().toString());
intent.putExtras(bundle);
startActivity(intent);
}
});
}
}
segundo:
faltan los imports para el .java FrmMensaje:
import android.app.Activity;
import android.os.Bundle;
import android.widget.TextView;
——————————————–
tercero:
básicamente en el Manifiest se debe agregar esta línea:
——————————————–
creo que con esto aclarado podemos prescindir del Copy/Paste ;)
Hey que tal. me pasa exactamente el mismo problema que tienen Ricardo Vallejo y David Pulido, en realidad no tengo idea de donde tengo que crear el fichero frmmensaje.xml. Me gustaría que me ayudaran con ese problema, para poder montar este mismo ejemplo. Gracias desde Colombia.
Hola Nicolas tengo entendido que:
final EditText txtNombre = (EditText)findViewById(R.id.TxtNombre);
final Button btnHola = (Button)findViewById(R.id.BtnHola);
lo puedes poner dentro del método onCreate que va despues de la declaración de la clase HolaUsuario: public class HolaUsuario extends Activity
asi:
public class HolaUsuario extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
final EditText txtNombre = (EditText)findViewById(R.id.TxtNombre);
final Button btnHola = (Button)findViewById(R.id.BtnHola);
}
}
me peta cuando pongo el nombre y no se dond tengo el fallo
al darle al boton hola me peta
Sin olvidar que hay que declarar la clase FrmMensaje como activity en el Mainfest.
No sabía esto, y al ver que el programa petaba, lo descubrí introduciendo el startActivity() dentro de un try-catch mostrando un toast.
Efectivamente, tal como indica en el artículo hay que declarar la clase FrmMensaje en el AndroidManifest.xml
Hola!
Buen tutorial, a ver si soy capaz de seguirlo… Por el momento estoy atascado en el mismo punto que Joan (creo). Es decir, en las líneas:
final EditText txtNombre = (EditText)findViewById(R.id.TxtNombre);
final Button btnHola = (Button)findViewById(R.id.BtnHola);
me marca errro en «id» y me indica «id cannot be resolved or is not a field»
Diría que es porque no aparece en «R», pero no se puede modificar a mano, no? Es posible que «R» se actualice automáticamente al realizar algún proceso? Con cual?
A ver si alguien me tira un cable…
Un saludo!
Buenas, disculpa tengo problemas con este primer proyecto, que yo sepa y como haya leído cuando escribes en los XML los IDs o @Strings automaticamente en el R.java y en el strings.xml tienen que generarse sus respectivos campos pero no lo hace y me da errores, 2 de ellos en el main.xml son:
Couldn’t resolve resource @string/nombre
Couldn’t resolve resource @string/hola
Nota: tuve que editar manualmente el R.java ya para que en el archivo HolaUsuario.java reconociera los campos.
Espero me aclaren mi duda, gracias!
bueno gracias por el tuto, pero creo que deberias revisarlo y modificarlo por que tiene cosas mal, por ejemplo en tu código fuente esta un FrmSaludos.java, en la explicacion no se menciona, asi como donde va cada codigo y por que.. eso si hace que uno se pierda…. ami en lo personal me salio errores en el main.xml
error: Error: No resource found that matches the given name (at ‘text’ with value ‘@string/hola’).
error: Error: No resource found that matches the given name (at ‘text’ with value ‘@string/nombre’).
siguiendo exactamente lo que se menciona.
saludos
Hola Soldier. Ese fallo también me salía a mi. Estoy empezando con android así que no se si mi explicación es la más adecuada, pero lo intentaré xD.
Tras mucho mirar de forma amenazante el código a ver si me daba algún tipo de respuesta me fijé que esos dos elementos deberían haber quedado registrados en la clase R y por algún extraño motivo no aparecían por ningún lado, por lo que tomé la determinación de poner esto
android:text=»@+string/nombre»
android:text=»@+string/hola»
Escribiendo esto fue cuando la aplicación definitivamente dejó de darme errores y me funcionó. No estoy seguro de que sea la mejor solución (tampoco se si la única), pero al menos funciona.
Definitivamente me he dado cuenta que ambos elementos sirven para ponerle nombre al campo de texto y al botón, por lo que finalmente he optado por esta opción:
android:text=»nombre»
android:text=»hola»
Espero que les sirva.
Excelente tutorial!!! Gracias por tu esfuerzo, me va a venir genial ahora que estoy interesada en meterme en el mundo del desarrollo de aplicaciones para Android :D
Hola e leido bastante tu tutorial, y me a parecido muy bueno, he aprendido en tan solo 1 semana montones de cosas, quiero hacerte una recomendación, y es que en algunos ejemplos de código el lector se queda corto o se pierde, por ejemplo en la parte de crear la primera app , en
definidos como siempre en la clase R:
final EditText txtNombre = (EditText)findViewById(R.id.TxtNombre);
final Button btnHola = (Button)findViewById(R.id.BtnHola);
si el lector es novato en programación se queda corto, asi que seria bueno poner el codigo completo ;) y por otro lado, hay una herramienta muy buena llamada help and manual, te la recomiendo. de resto tu manual se puede decir que está impecable. un saludo
Hola,
El tutorial está genial. Me ha costado un poco instalar todo y echrlo a andar pero cuando parecía que había solucionado todo lo ejecuto y no hace nada. No tengo errores, todo parece que está bien pero me sale la pantalla del emulador del móvil con la palabra android y ni labels, ni cuadro de texto ni nada.
Tengo la última versión de eclipse, del AVD, etc etc descargado todo ayer
Gracias,
Ya me sale todo bien gracias.
Tenía un error en el xml y no había puesto bien el nombre de la clase java.
Hola a todos eh tratado de seguir el tutorial de echo lo voy a empezar de nuevo ya que eh tenido algunos errores como los que se mencionan en los comentarios pero por ejemplo nadie ah solucionado la pregunta de donde se va a crear el archivo de frmmensaje.xml!!! Si alguien me pude decir se los agradeceria!!!!!
Creo que le falta una cosita a este ejemplo y indicar que se importa en el top
Saludos
Hola me falla , me sale el siguiente error «Couldn’t resolve resource @string/nombre», podrias ayudarme?,
Saludos!
a Emilio y los demás que no saben dónde crear los xml:
el frmmensaje.xml se debe crear en la misma carpeta que está el main.xml o sea en «res/Layout» sobre esta carpeta le das click derecho y seleccionas New/Android XML File, te va a salir una ventana donde le colocas el nombre «frmmensaje» y elegis el tipo que en este caso es un «LinearLayout».
También pueden darle click derecho sobre esa misma carpeta y elegir «New/Other» y en la carpeta android seleccionan «Android XML Layout File».
Estimado que te parece cambiar las lineas de tu código por estas:
y una función aparte, es más ordenado creo yo si tienes muchos eventos no debes tener todo junto en el constructor.
Hola amigos, cuando pulsos el botón «Hola», la aplicación me lleva la vista ActionActivity del saludo, pero no me muestra nada.
Quizás alguien me pueda ayudar.
hola, alguien podria poner el codigo completo nomas para checarlos por que me salen errores
#droid oye eso erroe espor que tienes que declarar las variables tipo string, ,, agregan en face porfa enrique_alfa_@hotmail.com
Muy buen POST
Así debe ser aprender desde las bases…
Probé modificando algo pequeño como poder usar el objeto bundle de la clase FrmMensaje que viene en el metodo:
protected void onCreate(Bundle savedInstanceState)
así ya no es necesario hacer otra instancia de la clase Bundle
savedInstanceState = getIntent().getExtras();
txtMensaje.setText(String.format(«Hola %s», savedInstanceState.getString(«nombre»)));
El tutorial está muy bien pero faltan muchas cosas por explicar. Porque al ir cambiando el código el R no se cambia solo, o al menos a mi. Luego no explicas donde hay que poner cada cosa.
Al final he optado por probar tu código pero me da errores, así que tampoco lo he podido probar. Me sale todo el rato un NullPointerException.
En cualquier caso gracias por el curro.
hola, el ejemplo lo he seguido y me da este error al ejecutar
Emulator] could not get wglGetExtensionsStringARB
creo que es porque no tengo la versión de openGL actualizada, que puedo hacer si tengo un portatil con windows XP 32
por cierto, el manual esta muy bien explicado
gracias
un salu2
he mirado los drivers de la tarjeta grafica y estan correctos
este es el log completo, el cual me deja entrar en el emulador pero no el teclado aparece inhabilitado, solo aparece habilitado la parte del menu
alguna ayuda
muchas gracias
[2012-08-08 19:24:58 – net.sgoliver.HolaUsuario] ——————————
[2012-08-08 19:24:58 – net.sgoliver.HolaUsuario] Android Launch!
[2012-08-08 19:24:58 – net.sgoliver.HolaUsuario] adb is running normally.
[2012-08-08 19:24:58 – net.sgoliver.HolaUsuario] Performing net.sgoliver.HolaUsuario activity launch
[2012-08-08 19:24:58 – net.sgoliver.HolaUsuario] Automatic Target Mode: launching new emulator with compatible AVD ‘Dispositivo’
[2012-08-08 19:24:58 – net.sgoliver.HolaUsuario] Launching a new emulator with Virtual Device ‘Dispositivo’
[2012-08-08 19:25:12 – Emulator] Failed to create Context 0x3005
[2012-08-08 19:25:12 – Emulator] emulator: WARNING: Could not initialize OpenglES emulation, using software renderer.
[2012-08-08 19:25:12 – Emulator] could not get wglGetExtensionsStringARB
[2012-08-08 19:25:12 – Emulator] could not get wglGetExtensionsStringARB
[2012-08-08 19:25:12 – Emulator] could not get wglGetExtensionsStringARB
[2012-08-08 19:25:12 – Emulator] could not get wglGetExtensionsStringARB
[2012-08-08 19:25:12 – Emulator] could not get wglGetExtensionsStringARB
[2012-08-08 19:25:12 – Emulator] could not get wglGetExtensionsStringARB
[2012-08-08 19:25:12 – Emulator] could not get wglGetExtensionsStringARB
[2012-08-08 19:25:12 – Emulator] could not get wglGetExtensionsStringARB
[2012-08-08 19:25:12 – net.sgoliver.HolaUsuario] New emulator found: emulator-5554
[2012-08-08 19:25:12 – net.sgoliver.HolaUsuario] Waiting for HOME (‘android.process.acore’) to be launched…
[2012-08-08 19:26:04 – net.sgoliver.HolaUsuario] WARNING: Application does not specify an API level requirement!
[2012-08-08 19:26:04 – net.sgoliver.HolaUsuario] Device API version is 7 (Android 2.1-update1)
[2012-08-08 19:26:04 – net.sgoliver.HolaUsuario] HOME is up on device ‘emulator-5554’
[2012-08-08 19:26:04 – net.sgoliver.HolaUsuario] Uploading net.sgoliver.HolaUsuario.apk onto device ‘emulator-5554’
[2012-08-08 19:26:05 – net.sgoliver.HolaUsuario] Installing net.sgoliver.HolaUsuario.apk…
[2012-08-08 19:26:26 – net.sgoliver.HolaUsuario] Success!
[2012-08-08 19:26:26 – net.sgoliver.HolaUsuario] Starting activity net.sgoliver.HolaUsuario on device emulator-5554
[2012-08-08 19:26:34 – net.sgoliver.HolaUsuario] ActivityManager: Starting: Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] cmp=net.sgoliver/.HolaUsuario }
No hay la carpeta res en «Hello World»
lo de la carpeta «res» lo dices por mi?
he probado en otro ordenador y me da el mismo fallo, cosa rara, alguna ayuda
ademas estoy probando con virtualbox pero al llegar a eclipse no me lo reconoce
si alguien puede ayudar, perfecto
muchas gracias
Genial, nunca me había puesto tan contenta al programar un «Hola Mundo», jajaja. Me encanta el tutorial, muchas gracias Salvador.
Una pregunta… en el fichero frmmensaje.xml tienes lo siguiente:
Que significa $mensaje en el TextView…
Gracias.
Hola, ante todo agradecerte este manual y el tiempo que dedicas a enseñar a gente como yo. El curso me está gustando y espero terminarlo.
Yo vengo que programar en java y otras tecnologías y más o menos se de que va esto, aunque al introducirme en Android he visto que algunas cosas se me complicaban con tonterías.
Te las cuento por si quieres añadirlas al manual o por si alguien le puede servir. Tienes ganado el cielo con tanto comentario de tantas índoles.
Respecto a los imports. He visto que ya se comenta, para alguien algo «pez» en este tema, se puede solucionar pulsando las teclas CTRL + MAY + O a la vez. De esta manera se completan los imports, aunque «ojo»!, puede introducirte alguna clase que no sea exactamente la que quieres. (onClick ….)
Respecto al fichero main.out.xml que aparece sin razón y hace desaparecer la clase R fallando todo el ejemplo. El problema es que intentamos hacer Run (Ejecutar) desde la ventana que nos muestra los layouts. Si nos ponemos en cualquier clase java, no dará ese error. Parece mentira pero así es. Esto me ha hecho volverme loco hasta que he visto este post (http://mobilecreations.blogspot.com.es/2012/03/premature-end-of-file-mainoutxml.html)
Mil gracias
Hola Fernandido, te agradezco los comentarios. Estoy en pleno proceso de actualización de algunos artículos del curso y son bienvenidas todas las ideas/propuestas para mejorar los contenidos. Saludos.
Buenas,
llevo un tiempo siguiendo los artículos que creas para este curso de Android, hasta ahora no había empezado a mirarme nada del curso porque aun estaba terminando de aprender algunos conceptos de Java.
Ahora ya he empezado con el curso y me encuentro con este Hola Mundo y he visto, y supongo que tu también, que cuando creas un nuevo proyecto para Android lo han cambiado de tal forma que ahora también se puede especificar el icono que tendrá la app y por último crear la Actividad. Tal vez cuando tengas tiempo puedas actualizar la entrada para añadir esas pequeñas novedades para los futuros usuarios que vengan a aprender a desarrollar en Android.
Se agradece todo tu trabajo por enseñarnos a desarrollar en Android :)
Un saludo
Buenas,
Ya he realizado todos los pasos de instalación tal y como indicas en el punto anterior. Sin embargo al intentar crear un proyecto nuevo de Android, no me aparece la ventana que pones en el blog, pero además indicas «…En primer lugar vamos a crear un nuevo proyecto Android tal como vimos al final del primer post de la serie.», y yo no lo encuentro. El caso es que las opciones que he podido ver son: File –> New –> Project –> Android application ó Android Project from existing code ó Android sample, etc.., y no sé cual es la correcta.
No obstante he probado a bajarme el codigo fuente que pones en el link de mas abajo y con la opción «Android Project from existing code», me da un error «Invalid priject description».
Y por otro lado si abro el codigo mediante File –> Open File –> elegir ficheros .java, etc, al intentar compilarlo me deja elegir el «ant».
Parece que algo se me escapa pero no sé que es. ¿Puedes ayudarme?.
Gracias y un saludo.
Excelente aporte, como todos han comentado, si uno se guía solo en el código que dice el capítulo se encontraran con varios errores. Se corrigen de la siguiente manera:
1) En main.xml, dentro del se agrega android:id=»@+id/LblNombre», es recomendable colocar un id por cada control o elemento de la interfaz gráfica.
2) En strings.xml se agregan las lineas.
Escribe tu nombre:
Hola
3) En HolaUsuario.java se importan las siguientes librerias para EditText, Button, Intent, setOnClickListener() y View.
import android.widget.EditText;
import android.widget.Button;
import android.content.Intent;
import android.view.View.OnClickListener;
import android.view.View;
4) En HolaUsuario.java, los 2 final, final EditText txtNombre y final Button btnHola se colocan dentro del método onCreate(), después del setContentView(R.layout.main);
5) En HolaUsuario.java, la función btnHola.setOnClickListener(new OnClickListener() { … }); se coloca dentro del método onCreate().
6) En FrmMensaje.java se importan las siguientes librerias para Activity, Bundle y TextView.
import android.app.Activity;
import android.os.Bundle;
import android.widget.TextView;
7) En frmmensaje.xml eliminar la línea android:text=»$mensaje», ya que no nos perjudica a la hora de ejecutar la aplicación.
Saludos y de nuevo, gracias por la página :)
Muy bueno el curso, muchísimas gracias a su autor. Es de agradecer que haya personas dispuestas a compartir sus conocimientos con todo aquel que lo necesite.
He visto algunos comentarios de personas que reciben el error:
«Couldn’t resolve resource @string/nombre_de_la_cadena».
No sé si llego a tiempo para ayudar, mi recomendación es que comprueben que han guardado los cambios en el archivo strings.xml. En mi caso, hasta que no lo he hecho, Eclipse no reconocía las nuevas cadenas que acababa de añadir.
A propósito, ¿sabe alguien si hay alguna diferencia de resultado apreciable entre programar la respuesta a un evento de pulsado de un botón mediante la construcción con setOnClickListener que se ve en este curso, y el uso del parámetro android:onClick al crear el botón en el archivo XML donde aparece el layout de la actividad?
Muchas gracias una vez más, y un saludo.
Hola muy bien explicados tus tutoriales, yo en cambio tengo un problema y es que cada vez que ejecuto el proyecto; el me habre la maquina virtual de android pero no me muestra nada ya que me envia un error «could not get wglGetExtensionsStringARB». Espero que me ayudes a solucionar dicho problema.
Me pasa igual me aparese se detubo inesperadamente, cierre forsado
[…] Fuente original, creo que es el mejor tuto para iniciarse, asi pues, lo añado al portal, pero en es… […]
Ando siguiendo el tutorial usando las ultimas versiones de todo y hay varios detalles desactualizados en este articulo, los voy comentando por si Oliver se ve con ganas y le da un repaso:
1) Cuando dices que añadamos un nuevo fichero xml, me quede un poco parado… ¿como?: En el árbol del proyecto, botón derecho sobre la zona que quieras (da igual, prueba sobre «src» por ejemplo»), «New, Other» (o Ctrl+N) y luego «Android», y aquí tiene «Android XML Layout file».
2) Cuando se habla de añadir los dos «final» con las refs. a los controles, no dices donde se han de poner, me volvía loco: van dentro del OnCreate justo después del setContentView
3) Idem. cuando añades el onClickListener, va dentro del onCreate debajo de lo anterior.
4) Dices que se añada un código que comienza por «btnHola.setOnClickListener(new OnClickListener() {«, pero no funciona, le falta un «View.» y la versión actualizada sería: «btnHola.setOnClickListener(new View.OnClickListener() {«.
5) Justo debajo sigues con «@override» pero el compilador me dice que sobra.
Con esos cambios ya me compila todo!
Oliver, como ando siguiendo el curso paso a paso, te ire «informando» de estas cosas que vaya detectando.
Gracias Sergio, tendré en cuenta estos detalles, sobre todo ahora que estoy actualizando todos los artículos. Saludos.
gracias por el curso esta muy bueno. el unico problema es que creo que en este articulo te das muchas vueltas para hacer algo relativamente facil. estuve leyendo el tutorial de android en http://developer.android.com/intl/es/training/basics/firstapp/starting-activity.html y me di cuenta que hace exactamente lo mismo pero sin la necesidad de pasar de intent a bundle, sino que deja el string creado siempre como un instant, y tampoco crea un metodo raro (no se si es un metodo pero se ve como uno) en medio del metodo onCreate()
Excelente articulo, me ayudo a aclarar mucho los conceptos.. Felicitaciones
Hola.
He seguido el tutorial hasta esta pagina.
Me parece muy interesante y está muy bien explicado, pero al llegar a esa página no puedo seguir (mejor no se siguir). En el primer codigo que hay que modificar en /res/layout/main.xml no estás. Es decir cuando voy a esa me aparece el archivo /res/layout/activity_main.xml y no hay codigo por ningun lado
No se seguir.
Un saludo
Miguel
Excelente trabajo. Y una buena manera ‘inútil’ (como le dice su autor arriba) para introducir los conceptos básicos de la programación de aplicaciones móviles Android.
Lo ejecuté en un Galaxy S3 y funcionó según lo especificado.
Gracias.
Hola muchas gracias por tu tutorial, espero que me sirva de ayuda. He visto que el código que pones en el tuto es diferente al del codigo fuente que pones para descargar y despista mucho sobre todo a los noveles como yo. Aparte dejaria claro que el método btnHola.setOnClickListener y sus variables finales van exactamente dentro del oncreate.
[…] el siguiente artículo empezaremos ya a ver algo de código, analizando al detalle una aplicación […]
Amigo, excelente tutorial…. solo que tengo problemas con el ultimo paso en donde modificamos el archivo androidmanifest. xml, no se si podrías publicar completo el código fuente de este fichero para verificarlo con el mio…
Hola , felicidades por el tutorial ,esta muy currado , pero mesalen varios errores al editar las lineas de comando a la izquierda de la ventana del tipo «txnombre cannot be resolve or is not a field» No estoy muy ducho en programacion asi que estoy unpoco perdido.POr cierto a alguien le ha funcionado?
Un saludo y gracias
[…] Por otro lado, las páginas más visitadas en el año 2012 han vuelto a ser con gran diferencia las dedicadas al Curso de Programación Android, especialmente el índice de contenidos, la sección dedicada a la obtención del curso en formato PDF, y los artículos iniciales sobre la instalación y configuración del entorno de desarrollo para Android, la estructura de un proyecto Android, y la creación de una aplicación Android sencilla de ejemplo. […]
Buenas, lo primero felicitarte por el curso.
Tengo el mismo problema que Israel. Creo que el error viene porque no se hace un «import android.R;» en MainActivity.java y en FrmSaludo.java. Por este motivo no encuentra los controles de la interfaz.
Aún así, a mi el error me sigue saliendo. He probado a limpiar el proyecto pero nada.
Oígan alguien me podría decir por que me aparece Couldn’t resolve resource @string/nombre Couldn’t resolve resource @string/hola?
se me olvidaba también me podrían decir porque me aparece this text field does not specify an input type or a hint o qué tengo que hacer?
oigan ya resolvi lo que puse en el segundo comentario quisiera saber que hacer para corregir esto: NOTE: This project contains resource errors, so aapt did not succeed, which can cause rendering failures. Fix resource problems first.
y esto: error: Error: No resource found that matches the given name (at ‘text’ with value ‘@string/hola’). y por último esto: error: Error: No resource found that matches the given name (at ‘text’ with value ‘@string/nombre’).
Me pasa lo mismo que a oscar, es decir en el fichero activity_main.xml
no me reconoce android:text=»@string/nombre» /> ni el android:text=»@string/hola» />, me da el mismo error Error: No resource found that matches the given name (at ‘text’ with value ‘@string/hola’).
Tambien me da error en MainActivity.java en las lineas:
final EditText txtNombre = (EditText)findViewById(R.id.TxtNombre);
final Button btnHola = (Button)findViewById(R.id.BtnHola);
No reconoce los identificadores TxtNombre y BtnHola, he visto en el fichero fuente que éstos están definidos en el fichero R.java, pero este es un fichero autogenerado, ¿como hago para autogenerarlo?
Ya solucione lo anterior en el fichero strings.xml, que con las prisas no había visto la explicación, con esto parece que ya funciona
Hola quisiera saber al compiliar el proyecto donde queda el apk, en donde puntualmente podemos escribir el nombre de la aplicacion difrente al del nombre del proyecto, verificar si podemos colocar a ese nombre caracteres en español como á,é,í,ó,ú,ñ o espacios.
Hola como estan tengo un pequeño inconveniente, ya quedo lista la aplicacion no tengo ningun error al parecer, pero al ejecutar con cualquier emulador se queda la pantalla negra o con las letras de android, pero de hay no pasa luego de un rato se cancela la aplicacion se ve que compila bien pero no se ejecuta
Disculpa se me olvido agradecer por tan buenas enseñanzas
Hola Buen dia, me sirvio de mucho el curso recien termine de crear todo. pero cuando ejecuto el emulador no hace mas que mostrarme la fecha y hora y nada mas. que puede ser ?
Gracias por compartir el tutorial.
la verdad siempre que trato de copiar las ordenes me lanza error aparece una x en la escritura
no habla otro proyecto
Hola quisiera agradecerte por el excelente trabajo que has hecho.
Sin duda es el mejor tutorial de android en Castellano, y lo mejor es que esta actualizado y que es muy fácil de entender.
Los ejemplos me funcionaron perfecto, seguiremos con el curso que realmente esta muy interesante.
Saludos,
Gabriel
Simplemente daros las gracias.
Hermano, me saco el sombrero por la calidad, estructura del contenido, redacción y utilidad de tu curso. Te felicito, Hace rato que no leo las ideas tan bien ordenadas como lo has hecho. Gracias!
Hola,
Tengo un problema, si no he entendido mal la explicacion, al escribir «@+id/TxtNombre» esto hace que se añada automaticamente una constante en la clase R para luedo poder usar la referencia R.id.TxtNombre ¿no?. Es que a mi cuando le he dado a «Run» me ha aparecido un mensaje de advertencia de que habia fallos y todos hacian referencia a que no localizaban las referencias «R.id…….» y he tenido que añadir las constantes manualmente. ¿Donde he fallado?¿Hay que hacer algo para que las autogenere?
Gracias.
Pablo en el archivo /res/values/strings.xml seguramente habrás borrado la línea en la que pone:
Settings
Hola
Al intentar ejecutar la app me indica un error de compilacion
»
Errors occurred during the build.
Errors running builder ‘Android Package Builder’ on project ‘HolaUsr’.
sun/security/x509/X500Name
»
a lo cual tengo una duda, revisando en otros foros dicen que por la jvm, la que yo tengo es la 1.7 de oracle, me puedes ayudar a comprender cual es el error real en esto o que es lo que me falta por configurar y/o instalar
Gracias!!
Muchisimas gracias buen tutorial!!!
Hay un pequeño error en la parte del android-hola-usuario / src / net / sgoliver / android / holausuario/MainActivity.java
en la parte de
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.activity_main, menu);
return true;
}
no es R.menu.activity_main, menu, sino R.layout.activity_main, menu
bueno tutorial!! UN SALUDOS!!
Cuidado Antonio, porque la linea indicada en el artículo SÍ es correcta, lo que debes «inflar» es el menú, no el layout de la actividad. Por tanto lo correcto es R.menu.activity_main
Saludos.
Una pregunta, ¿Porqué no me deja compilar la aplicación en un android 4.2.1?
gracias saludos
A que te refieres con inflar el menu, pues tengo todo el codigo identico al que poneis aqui y en esa linea me da fallo del tipo «activity_main cannot be resolved or is not a field»
gracias por la rapida respuesta y haber si me puedes ayudar.
pd: Poniendo lo que yo indique me compila en versiones anteriores a la 4.0
Vale admin ya lo tengo solucionado, el problema que habia que mi r por defecto lo crea como main a secas y en el vuestro como activity_main, e ahí el problema jaja solo tuve que poner main a secas y listo.
Gracias por la ayuda y a seguir con este pedazo de manual!!
[…] Este ID nos llega como parámetro del intent que ha lanzado la actividad. Como ya vimos en un artículo anterior del curso, este intent se puede recuperar mediante el métdo getIntent() y sus parámetros mediante […]
Muy bueno crack!
chevere
Viejo Oliver!!! desde Colombia que alegría haber hecho la primera APP, estoy entusiasmado con este tema, quiero llegar a poder cosas con el protocolo bluetoth. aqui seguire pegado de tu curso.
Que tal, excelente artículo,
Sin embargo no se si sea mi ambiente o me haya faltado de configurar algo, pero me surgían los siguientes problemas al intentar correr el programa:
1.- Al intentar correrlo con la versión 2.2 marca que el snapshot es incompatible, por lo que sólo «funciona» con la 4.2.
2.- Al correrlo con la 4.2 el emulador se queda en blanco, bueno negro, y no arranca
Lo solucioné al desactivar la opción «Snapshot» de cada instancia del emulador.
Saludos
Oliver! Gracias por el tuto, lo ejecute en un emulador como tu lo tienes tal cual creado pero se queda en la pantalla negra con las letras de android brillantes, ya lleva 15 min y nada
por favor ayudame
He estado siguiendo este curso, y todo de maravilla hasta correr la aplicación, me salen estos errores, estoy trabajando sobre windows XP.
Alguien me pudiera decir por que muestra estos errores, Saludos.
Android Launch!
adb is running normally.
Performing com.localhost.holausuario.MainActivity activity launch
Launching a new emulator with Virtual Device ‘GALAXY’
could not load func glBlendEquationSeparate
could not load func glStencilFuncSeparate
could not load func glIsProgram
could not load func glIsShader
could not load func glUniform1f
could not load func glUniform1fv
could not load func glUniform1i
could not load func glUniform1iv
could not load func glUniform2f
could not load func glUniform2fv
could not load func glUniform2i
could not load func glUniform2iv
could not load func glUniform3f
could not load func glUniform3fv
could not load func glUniform3i
could not load func glUniform3iv
could not load func glUniform4f
could not load func glUniform4fv
could not load func glUniform4i
could not load func glUniform4iv
could not load func glUniformMatrix2fv
could not load func glUniformMatrix3fv
could not load func glUniformMatrix4fv
could not load func glAttachShader
could not load func glBindAttribLocation
could not load func glCompileShader
could not load func glCreateProgram
could not load func glCreateShader
could not load func glDeleteProgram
could not load func glDeleteShader
could not load func glDetachShader
could not load func glLinkProgram
could not load func glUseProgram
could not load func glValidateProgram
could not load func glGetActiveAttrib
could not load func glGetActiveUniform
could not load func glGetAttachedShaders
could not load func glGetAttribLocation
could not load func glGetProgramiv
could not load func glGetProgramInfoLog
could not load func glGetShaderiv
could not load func glGetShaderInfoLog
could not load func glGetShaderSource
could not load func glGetUniformfv
could not load func glGetUniformiv
could not load func glGetUniformLocation
could not load func glShaderSource
could not load func glStencilMaskSeparate
could not load func glBlendEquationSeparate
Failed to allocate memory: 8
This application has requested the Runtime to terminate it in an unusual way.
Please contact the application’s support team for more information.
Excelente tutorial!!, muchas gracias por tu valiosísima contribución.
Todo bien cuando lo ejecuto en Android 2.2 pero cuando lo ejecuto en el Galaxy Nexus de android 4.2 me manda estos errores…
Emulator] Failed to allocate memory: 8
Emulator]
Emulator] This application has requested the Runtime to terminate it in an unusual way.
Emulator] Please contact the application’s support team for more information.
Creo q tiene que ver con el otro emulador de 2,2 Nexus One que no logro poder cerrarlo…
Gracias por el tutorial :D esta genial aunque un poco complicado para los q no tienen mucho conocimiento de java o eclipse
buenos dias, soy novato en esto de programacion en android, y veo que el tutorial que creaste esta muy bueno por eso lo estoy siguiendo con mucho empeño, pero tengo algunos incovenientes, esta linea me genera error (setContentView(R.layout.activity_main);
se subraya en la R como si no reconociera la ruta , de antemano muchas gracias por compartir tus conocimientos.)
buenas tardes.. al intentarlo ejecutarlo cuando creo un nuevo “perfil de ejecución”, noo me toca el proyecto, me aparece un mensaje como el siguiente
There is no android project named ‘HolaUsuario’
Creo que por claridad, conviene que todas lo que configures que no sean parte de la sintaxis o el vocabulario de programación, lo deberías poner en español, ¿Se puede poner así?
Intent intento = new Intent(MainActivity.this, FrmSaludo.class);
Si sí se puede, entonces quedaría muy claro que intento es algo que «bautizas» tú.
Gracias
Hola admin gracias por el material online espero terminarlo todo en linea, soy programador en JavaSE trabajo con aplicaciones que incluyen bases de datos y he aprendido patrones de diseño y un par otras cosas mas enfocado mas a las bases de datos que tanto me gusta para mis clientes y estoy ya hace unas semanas en android pero me parece muy bueno el temario que has puesto, creo que si lo termino la verdad me gustaría darte una donación por tu aporte valioso gracias y saludos desde Honduras.
Hola admin gracias por el material online espero terminarlo todo en linea, soy programador en JavaSE trabajo con aplicaciones que incluyen bases de datos y he aprendido patrones de diseño y un par otras cosas mas enfocado mas a las bases de datos que tanto me gusta para mis clientes y estoy ya hace unas semanas en android pero me parece muy bueno el temario que has puesto, creo que si lo termino la verdad me gustaría darte una donación por tu aporte valioso gracias y saludos desde Honduras.
y a los usuarios que siguen esto les recomiendo que se propongan crear en si una aplicación parecida pero no la misma y se llenen de otras fuentes de conocimientos para saber el porque algunas cosas no les funcionan, yo la verdad no hago mucho de lo que el hace porque tengo en mente hacer otras cosas pero esto si va relacionado, así que animo.
hola gracias por este curso,
tengo una duda al tratar de probar me sale error en la linea android:label=»@string/title_activity_main» > y android:label=»@string/title_activity_saludo» >
con lo siguente
error: Error: No resource found that matches the given name (at ‘label’ with value ‘@string/
title_activity_main’).
y el otro igual pero yo agrege en el archivo string.xml estas lineas no se si estan bien la sintaxis
activity
saludo
Buenas, enhorabuena por el tutorial pienso que nos va a ser sencillo iniciarnos a android gracias a ti!. Tengo una duda al final, cuando hay que crear los strings en el archivo strings.xml
con que name y value?. Gracias de antemano.
Perdona no se ha impreso el codigo, me refiero a los strings.xml de title_activity_main y title_activity_saludo. Gracias
hola, gracias por todo esto. acabo de terminar esta sección (por segunda vez para asentar bien conocimientos).
recomiendo , como se ha dicho por ahi en otro comentario, ‘jugar’ un poquillo con el ejemplo y añadir más cosas, como otros cambpos de texto (p.e. apellidos) para ver si podemos hacerlo solos sin ayuda.
un aporte, vi por ahi, y me resulta bastante útil, que si pulsas control + shift + O a la vez, en el código se te añaden directamente los imports que te falten según lo que hayas escrito
saludos
excelente me está ayudando bastante para iniciarme en esto, eso si hice un par de modificaciones como por ejemplo ocupar el parámetro android:onClick y así llamar directo a un método dentro de mi clase, Muchísimas gracias por el curso
hola trato de seguir el ejemplo pero en TextView y Button me da el siguiente error
Error: No resource found that matches the given name (at ‘text’ with value ‘@string/nombre’).
Alex, te falta agregar esto en tu archivo de string
Escribe aquí tu nombre
buscalo en la carpeta res/values
con eso lo arreglas, saludos
Al correr mi aplicacion se queda el emulador en negro con letras blancas q dicen ANDROID_ saben por que??
hola muchas gracias por estos post los estoy siguiendo en orden para aprender llevo esta semana pues jajajja GRACIAS no resulta feo.
Hola te felicito por el buen material y estaba siguiendo el primer ejemplo y me da un error en esta linea..
txtSaludo.setText(«Hola » + bundle.getString(«NOMBRE»));
bundle no puede ser resuelto …. he seguido paso a paso y no se porque me da ese erro en el FrmSaludo aqui el codigo
public class FrmSaludo extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_saludo);
//Localizar los controles
TextView txtSaludo = (TextView)findViewById(R.id.TxtSaludo);
//Construimos el mensaje a mostrar
txtSaludo.setText(«Hola » + bundle.getString(«NOMBRE»));
}
}
Hola Carlos, te has saltado una linea, justo antes de txtSaludo.setText(…) hay una linea donde se crea el objeto bundle. Saludos.
Excelente tutorial, al inicio no entendi nada de lo que decias y la aplicacion no funciono (forzaba cierre) pero al segundo dia todo perfecto, gracias.
A todos los que se quieran iniciar programación en Android, les recomiendo ampliamente hacer un curso basado en JAVA, después de tomar el curso entiendes el lenguaje, como ésta acomodado, que significa cada casa, en fin realmente APRENDES.
Tremendo trabajo estás haciendo Oliver y se nota que es por amor al arte, ni siquiera tienes publicidad en tu blog, Por todo este curso y esfuerzo que vale mucho más que 2 euros GRACIAS ;D
Hombre, algo de publicidad sí tengo, pero eso sí que no me paga ni el dominio de la web… Muchas gracias por los comentarios. Saludos.
Heey Muy Bueno el aporte loco, le entendi excelente,solo que no me corrio al ejecutarlo me manda error en los @string tanto en los de @string/nombre hasta estos de @string/tittle_activity_main y @string_activity_saludo por que? u.u
saludos y muchisimas gracias por el aporte! :D
esta muy bueno tu tutorial de los mejores que he encontrado, sin embargo tengo un problema que no he logrado resolver se trata del setOnClickListener inicialmente lo escribi para ir interiorisando lo que iba sucediendo pero en el momento que llegue a esta parte copie y pegue porque no me servia mira el codigo es tal cual el que tenes ahi, me sale el sgte error:
– The type new DialogInterface.OnClickListener(){} must implement the inherited abstract method
DialogInterface.OnClickListener.onClick(DialogInterface, int)
– Line breakpoint:MainActivity [line: 25] – onCreate(Bundle)
– The method setOnClickListener(View.OnClickListener) in the type View is not applicable for the arguments (new DialogInterface.OnClickListener(){})
no se que sucede, si me podes aclarar la duda lo agradeceria mucho igualmente muchas gracias por el tutorial
Excelente! Consigues explicarlo perfectamente de un modo muy simple.
Seguiré con el resto!
Hola, muy bueno el curso.
Tengo un problema, tengo instalada la API 18 en mi eclipse, pero al tratar de crear un nuevo proyecto me dice que debo instalar «Android Support Library» el cual ya está instalado y pues no me permite crear el proyecto
Gracias
Buenas,
he seguido el tutorial al pie de la letra, y me da el siguiente error en estas líneas en el fichero mainActivity.java:
final EditText txtNombre = (EditText)findViewById(R.id.TxtNombre);
final Button btnHola = (Button)findViewById(R.id.BtnHola);
TxtNombre cannot be resolved or is not in a field. Me ocurre lo mismo con el BtnHola.
Muchas gracias y gran trabajo! ^^
Dos dudas:
– Una, he copiado el código entero y tengo un problemilla, cuando ejecuta la segunda activity, en vez de salirme «Hola » me sale «Hola NULL». Al parecer no lee el nombre que introduzco.
– ¿Como descargo los códigos fuente desde GitHub?
Ya he solucionado lo de NULL
Hola, excelente aportacion un 10, pero al igual que Juan! me marcan los mismo errore, y tambien si no es mucho pedir podrias explicar como correr tus proyectos desde Git con eclipse, ya los clone e importe pero no corren me marca un error de launcher
Buen aporte, muchas gracias.
hola, muy cheveres lo tutoriales, pero sugueriria que hicieran un menu de navegacion para acceder al proximo articulo, despues que uno haya terminado de leer. esto le da mas fluides.
Hola no se por que no sirve escribir con el teclado, me podrías ayudar.
Por que puede salir este error al ejecutar:
[2013-11-14 14:01:40 – HolaUsuario] Launching a new emulator with Virtual Device ‘Galaxy’
[2013-11-14 14:01:53 – Emulator] Failed to allocate memory: 8
[2013-11-14 14:01:53 – Emulator]
[2013-11-14 14:01:53 – Emulator] This application has requested the Runtime to terminate it in an unusual way.
[2013-11-14 14:01:53 – Emulator] Please contact the application’s support team for more information.
Hola alguien podria ayudarme he seguido el manual al pie de la letra pero me salen los siguientes errores en MainActivity.java
R cannot be resolved to a variable
Intent cannot be resolved to a type
Buen día.
Estoy siguiendo el tutorial sin embargo me marca error en estas lineas:
setContentView(R.layout.activity_saludo);
TextView txtSaludo = (TextView)findViewById(R.id.TxtSaludo);
final EditText txtNombre = (EditText)findViewById(R.id.TxtNombre);
final Button btnHola = (Button)findViewById(R.id.BtnHola);
en los 3 casos me dice que «cannot be resolved or is not a field»
De antemano muchas gracias:
Muchas gracias por el buen material.
Saludos
Buenas.
Primero de todo decir que es un tutorial excelente y mhe ha ayudado mucho, pero tengo un error que no consigo solucionar.
En el fichero AndroidManifest.xml se tenia que poner:
Mi error es:
error:Error: No resource found that matches the given name (at ‘label’ with value ‘@string/title_activity_saludo’).
LLevo horas dandole vueltas al error y no consigo solucionarlo, si me pudieras ayudar te estaria muy agradecido.
Excelente curso y lo mejor es que proporciona todo el código por si surgen errores al estar tipeando código, muchas gracias.
Excelente Curso gracias
Hola para los que tengan el problema con la librería R.java lo que deben hacer es corregir el código en activity_main.xml
) <—-así esta bien escrito
) <—-así esta bien escrito
les falta el signo +, despues de corregir y grabar todo aparece automaticamente la clase R.java
«(android:text=»@string/nombre» /> )» <——- así esta erroneo:
«(android:text=»@+string/nombre» />)» <—-así esta bien escrito
Buen tutorial, fácil de entender y bien explicado, sin duda el mejor que he encontrado, pero tengo estos errores
ctivity_main cannot be resolved or is not a field
TxtNombre cannot be resolved or is not a field,
lo mismo con el botón y no puedo probar mi aplicación por esto y he seguido todo al pié de la letra, que puede ser?
hola. cuando le doy click al boton me sale el error «unfortunately, HolaUsuario has stopped.»
porque pasa esto?
gracias.
Segun el logCat:
01-07 09:36:03.180: E/AndroidRuntime(724): FATAL EXCEPTION: main
01-07 09:36:03.180: E/AndroidRuntime(724): android.content.ActivityNotFoundException: Unable to find explicit activity class {com.farameo.holausuario/com.farameo.holausuario.FrmSaludo}; have you declared this activity in your AndroidManifest.xml?
Muchas gracias me ayudo mucho =)
Esta muy bien explicado me salio a la primera, gracias por tus explicaciones =)
Después de hacerlo todo y sin ningún error, al intentar ejecutar la aplicación con el emulador, me sale el siguiente error en la consola y no llega a abrirse nunca el emulador:
[2014-02-20 13:23:09 – Emulator] emulator: WARNING: Requested RAM size of 512MB is too large for your environment, and is reduced to 384MB.
[2014-02-20 13:23:11 – Emulator] Failed to allocate memory: 1455
[2014-02-20 13:23:11 – Emulator]
[2014-02-20 13:23:11 – Emulator] This application has requested the Runtime to terminate it in an unusual way.
[2014-02-20 13:23:11 – Emulator] Please contact the application’s support team for more information.
Alguien sabe a que puede ser debido?
Un saludo y muchas gracias a todos, sobretodo al creador de este excelente curso gratuito!
Hola nesesit alluda para crear una aplicacion para android en eclipse la aplicacion consiste en k al ejecutarla tomo n cantidad de fotos durrante n minutos ejemplo que tome 5 fotos durante 5 minutos se detenga pasen 20 minutos y buelva a tomar 5 fotos durante 5 minutos y se cierre y pòder ver las fotos tomadas en la galeria o que se guarden en la sd del telefono
Hola, intente hacer el tutorial y según yo lo seguí al pie de la letra pero tratando de no copiar codigo lo iba escribiendo yo y me basaba en lo que tenias puesto sin embargo me sale un error de NullPointerException
Hola a todos!
Bien! bien! bieeen!!!
Gracias por el curso. He tenido que rehacer tres veces el código porque me salia el típico error del Main_activity y no era capaz de ver el fallo hasta que leyendo con detenimiento toda la explicación finalmente he podido poner en marcha la app.
Qué satisfacción.
Para los que como yo, los que no tienen ni idea de programación, hay algunos pasos que no están muy claros pero dándole unas vueltas y fijándose muy bien en las explicaciones se puede!! que sí se puede!!
Gracias de nuevo!
Paso al siguiente nivel!
Saludos!!!
Hola a todos,
felicitaciones por el excelente tutorial, aun es posible hacer el pago para el archivo en PDF ?
Estuve probando los ejercicios y tengo una duda, si requiero pasar los datos del activity 1 al activity 2 todo funciona perfecto con el tutorial, pero si quiero poner otro dato en el activity 2 y regresar ese dato al activity 1 ?
Espero me puedan guiar.
que buen material para iniciar conocimientos en android te felicito
tengo una duda a mi me marca un error justo en el MainActivity en la parte de
getMenuInflater().inflate(R.menu.activity_main, menu);
justo en el R.menu a que hace referencia ese: menu
Excelente curso de android te felicito portodo el es fuerzo y dedicacion, sabes he realizado la primera apk del tema uno holausuario , Tengo un inconveniente al ejecutarla en el dispositivo real me manda el siguiente mensaje, holausuario se detuvo:cancela/aceptar y termina no se que pasa; en el código no manda errores!!! Ayudar porfavor gracias.
una pregunta me funciono todo pero ¿por que al obtener la referencia de los controles de el mainactivity se usa FINAL y en la localizacion de los controles del frmsaludos no se usa, o no es importante el «FINAL».
Hola he realizado todo pero en el archivo activity_main.xml me da error en:
me dice:
error: Error: No resource found that matches the given name (at ‘text’ with value ‘@string/
hola’).
He intentado corregirlo pero no lo consigo.
El error me sale en la parte del boton en : android:text=»@string/hola» /> error: Error: No resource found that matches the given name (at ‘text’ with value ‘@string/
hola’).
Muchas gracias por tu aporte!! Me estoy iniciando en el desarrollo para android en Java, y este curso me dio los fundamentos que ncesitaba. Sos muy bueno explicando, está todo muy claro, muchas gracias. Saludos desde Argentina!!
Hola,
Por alguna rara razón me da error en:
getMenuInflater().inflate(R.menu.activity_main, menu);
Lo he solucionado cambiando «activity_main» por «main» a secas, por si alguien se encuentra con el mismo problema y le sirve.
Buenas tardes, resulta que ya me va pasando como 4 veces y no se como solucionarlo:
El codigo no me da ningún error, pero cuando enciendo el emulador me dice que la aplicación ha sido cerrada desafortunadamente. Ayuda por favor!!!!
Gracias.
-marcoss. a mi tambien me paso lo mismo, hay q declarar en el manifest el activity_saludo.
Muchas gracias!!!!!!!
Eres de mucha ayuda!
Fantástico!
Hola a todos
tengo este problema al correr la aplicacion me sale : «unfortunately Hola_Usuario has stopped»
en el logcat me sale el warn thread exiting with uncaught exception y luego el error.
07-31 19:19:58.880: W/dalvikvm(899): threadid=1: thread exiting with uncaught exception (group=0xb4aecd70)
07-31 19:19:58.920: E/AndroidRuntime(899): FATAL EXCEPTION: main
07-31 19:19:58.920: E/AndroidRuntime(899): Process: com.example.hola_usuario, PID: 899
07-31 19:19:58.920: E/AndroidRuntime(899): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.hola_usuario/com.example.hola_usuario.MainActivity}: android.util.AndroidRuntimeException: You cannot combine swipe dismissal and the action bar.
he desarrollado este programa pero al arrancar el avd, no me muestra error en el codigo, pero detiene el avd, en las lineas de consola me dice: FATAL EXCEPTION. main
…. deseo saber cual es el error, si copie todos los archivos
de antemano muchas gracias.
Hola, muchas gracias a Oliver por este gran curso… a los usuarios que reportan que tienen error «java.lang.RuntimeException: Unable to start activity ComponentInfo…» se debe a que su layout se encuentra en el archivo fragment_main.xml, y en este tutorial (basado en una version anterior) todo se halla en activiry_main.xml ya que para mostrar el contenido se está usando : setContentView(R.layout.activity_main); pero no es en activity_main donde estan los views.
Saludos.
Hola!
he hecho la aplicación, en el simulador me funciona, pero en los móviles que lo he probado me da un error:
«Se ha detenido la aplicación.»
Lo he ejecutado en varios móviles y el fallo es el mismo, ¿Sabéis de que puede ser?
Gracias por el tutorial!
Hola, me sirvió mucho este tutorial para comprender algunos términos que quedaron ambiguos en mi clase del Instituto, muchas gracias por compartir el curso.
Simplemente magistral! Muchísimas gracias por tu paciencia y dedicación, tutorial imprescindible para aprender desde cero con Android studio!
Muchas gracias por el tutorial.
Muy interesante para iniciarnos en la programación en Android.
Buenos dias a todos.
Un error muy común y que me volvió loco fue el que no me cruzaba «@string/hola» con el res/values/strings.XML.
Bien, el fallo está en el dichoso copiar / pegar.
El problema es que nos hemos comido una linea importante dentro de la etiqueta :
Settings
Sin esta linea, no detecta la ruta donde ir a buscar el texto @string/
Saludos
Hola.
muy bueno el tutorial termine la codificacion y me salieron algunos errores pero leyendo los comentarios y revisando bien pude ejecutar sin problema. Lo unico que el nombre de la app en el emulador me aparece como ‘False’
Gracias.
Me parace de gran ayuda este tutorial que he encontrado,(por azares del destino :p) solo una pequeña recomendacíon,y sin afán de ofender ni nada por el estilo, deberías de cuidar la redaccíon, esto para darle un mayor toque de profesionalismo.
Muchas gracias, justo lo que buscaba. Explicaciones claras con ejemplos prácticos fáciles de entender.
Hay un pequeño problema de sintaxis en el layout activity_main.xml, la etiqueta EditText debería tener un cierre al final.
Un saludo.
Me da el siguiente error en los dos xml
Error:(1) No resource identifier found for attribute ‘id’ in package ‘com.example.mizzat.holausuario’
Que hice mal??
Gracias
Buenos días,
Excelente aporte. Gracias por su dedicación.