Acceder

Ver la Versión Completa : Decepcionado y profundamente desilusionado


neovin
15/11/10, 21:02:45
Bueno, pues al fin me decidí a programar en android y no podía haber entrado de peor forma.
He seguido varios tutoriales, he instalado el entorno en win7 64bits, ubuntu 64, win xp 32, he probado varias configuraciones y ejemplos y no hay manera. No paso del hola mundo. Algo pasa o algo hago mal. Necesito una ayuda por favor.

Para empezar partamos que instalo el entorno y los componentes bien, le indico el lugar del sdk descargado, creo un avd, etc.
- Eclipse arranca bien pero al generar un nuevo proyecto android me suelta el famoso "ERROR: Unable to open class file C:\Androidsdk\Proyectos\HolaUsuario\gen\HolaUsuari o\neoviri\R.java: No such file or directory" pero voy al gen del proyecto y allí tengo mi R.java. Mosquea pero allí está. De hecho arranca el hello world sin problemas.
- El problema viene en algo tan sencillo como crear un layout, lo creo y todo correcto. El problema está en que la clase R a veces le da por por crearlo y otras veces pasa del tema y claro, ya empieza el lio. A ver que hago.
- Seguimos, cuando a la clase R le da por portarse bien y me actualiza el layout pues nada, vamos a crear una nueva activity llamada FrmMensaje. Me voy para el src, creo una clase extendida a activity y le doy a finish. Hasta ahí todo bien. Ahora, para intentar explicar lo que ocurre lo pongo de la manera mas sencilla posible. Pego lo siguiente:
public class FrmMensaje extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.frmmensaje);
}
}

Ya tenemos el lio, eclipse me dice "Bundle cannot be resolved to a type". ¿por qué aquí me da error y en la activity principal que tambien tengo el Bundle no?
Si acepto la sugerencia de eclipse de "import Bundle (android os)" me desaparece el error.
El mismo error me ocurre si en la activity principal intento poner algo así final EditText txtNombre = (EditText)findViewById(R.id.TxtNombre); me dice que "EditText cannot be resolved to a type". Si los importo desaparecen, ¿pero por qué no lo reconoce? ¿por qué tengo que ir importando?. A veces al importar hasta me desparece la clase R sin ton ni son. Es como si no enlazase bien con los metodos del sdk, como si no entendiese.
Es desesperante. Soy novato pero no se si debo sufrir tanto. Agradecería cualquier ayuda, quiero aprender pero me he encontrado con esto que no me deja avanzar.

Gracias de antemano.
Saludos.

javielinux
16/11/10, 08:03:56
No te desesperes... vamos a ver si lo solucionamos

¿En tu proyecto debajo del directorio "gen" tienes un directorio llamado "Google APIs" con un archivo dentro llamado "android.jar"?

Si no es así pulsar botón derecho encima del proyecto y dale a "Propiedades". Ahora dale a "Android" y luego seleccionar la versión con la que quieres compilar tu programa

Lo del archivo R.java es raro. Paree que el problema es el que te digo antes y puede ser que luego te de conflictos con la clase R

¿Generas un proyecto de tipo "Android Project"? Si es así todo debería funcionarte

Es raro lo que te está pasando... ya cuentas... verás como se soluciona

Saludos

neovin
16/11/10, 14:03:41
Gracias Javielinux por responder.
Voy a intentar aclararlo con imagenes.
Creo el proyecto Android.
http://img530.imageshack.us/img530/1691/11761373.jpg
Relleno los parametros
http://img121.imageshack.us/img121/3341/18347727.jpg
El famoso error de la clase R.
http://img263.imageshack.us/img263/192/77620169.jpg
Aunque como se puede ver al final me la crea
http://img293.imageshack.us/img293/922/33189143.jpg
Al modificar algo del layout principal ya empiezan a aparecer algunos problemas que podrían solucionarse en strings.
http://img121.imageshack.us/img121/4489/82722172.jpg
Cuando preparaba las imagentes me ha ocurrido lo que comentaba, creo un layout y la clase R no se ha actualizado.
http://img168.imageshack.us/img168/3192/63278746.jpg
He vuelto a generar un nuevo proyecto y esta vez si me lo genera.
http://img27.imageshack.us/img27/679/50348165.jpg
Creo la nueva clase
http://img842.imageshack.us/img842/9863/36191627.jpg
con la activity extendida
http://img44.imageshack.us/img44/7687/14586521.jpg
quedando así
http://img819.imageshack.us/img819/6168/92656768.jpg
En principio sin errores
http://img717.imageshack.us/img717/6852/93688477.jpg
Ahora si pego el siguiente codigo tengo el error en bundle
http://img594.imageshack.us/img594/359/21827698.jpg
que si lo importo,
http://img574.imageshack.us/img574/8360/28585406.jpg
me quita el error, pero claro lo he tenido que importar
http://img576.imageshack.us/img576/2975/40299466.jpg
y lo mismo pasa con otros metodos o controles que si los importo se soluciona, pero que pasa con el id deberia generarlo en la clase R automaticamente y no de forma manual como me sugiere.
http://img691.imageshack.us/img691/1818/95168904.jpg
En fin, cuando no es un pito es una flauta, la cuestion es que no puedo avanzar porque ni los tutoriales tan sencillos como el de las imagenes (por cierto sacado de http://www.sgoliver.net/blog/?p=1316 ) puedo desarrollarlos. Y mira que tengo ganas.
Y lo más gracioso, es que en w7 64 y ubuntu 64 pasa lo mismo.
A ver si me podeis echar una mano.
Gracias. Saludos.

javielinux
16/11/10, 16:25:39
Creo que tu problema se soluciona pulsando CRTL + MAY + O

Los import los tienes que poner SIEMPRE y pulsando estas 3 magníficas teclas el sólo te pondrá todos los imports que necesites

En la última captura te debería de poner el import de EditText y de Button

Respecto al R prueba si con esto ya te funciona. Los IDs te los debería de crear en el momento que guardas el archivo XML, eso lo debe hacer sólo

El nombre del paquete no creo que sea el problema, pero deberías de ponerlo con la nomenclatura adecuada

Llámalo mejor "com.neoviri.holausuario"

Mira si después de estos cambios te sigue pasando

Lo de que la R no se actualice ni en Ubuntu ni en Windows no me cuadra. Algo hay que estar haciendo mal

Saludos

neovin
16/11/10, 19:57:38
Gracias nuevamente javielinux.
Bueno, parece que se va viendo algo de luz.
Para terminar el proyecto solo me queda por resolver los siguientes problemas que no se por qué ocurren.
http://img833.imageshack.us/img833/5013/41469201.jpg
http://img574.imageshack.us/img574/4904/21785021.jpg
http://img152.imageshack.us/img152/3789/37723415.jpg

Una vez visto esto, te comento algunas observaciones:

- Si cambio el codigo del main layout sin haber generado en strings las correspondientes variables a las que menciono, evidentemente sale el error, pero es más si entonces creo el otro layout frmmensaje.xlm es entonces cuando la clase R no se actualiza y no crea el frmmensaje. Sin embargo, si creo primero el frmmensaje.xlm antes de cambiar el codigo al main, entonces si que me lo crea en la clase R.
- Respecto a los imports, ¡¡¡gracias!!!. Efectivamente, el CRTL + MAY + O lo soluciona.
- El fallo del id se soluciono al crear las variables en el string que a su vez soluciono el main. O por uno o por otro lo soluciono.
- Faltaría pues saber por qué pasa lo de las imagenes que te adjunto.
- Por último, creo que para no tener problemas lo mejor es ir de principio a fin, si se van a usar variables en un layout, creo primero las variables y luego hago el layout. Si en una clase voy a usar un layout con unos componentes determinados, creo primero el layout con tales componentes primero y despues creo la clase. Al final creo que el copy paste de los tutos sin tener un procedimiento válido es lo que me desconcertaba. Independientemente de todo, ¿crees normal que los errores bloqueen por completo la clase R?

Bueno, a ver si solucionamos el setOnClickListener y el onClick y lo bordamos. :aplausos:
Muchas gracias por la ayuda y los ánimos.
Saludos.

javielinux
17/11/10, 11:33:59
Sólo se me ocurre que el "OnClickListener" que hayas importado no sea el de la clase apropiada

Mira si tu import del OnClickListener es el siguiente

import android.view.View.OnClickListener;

Es posible que lo hayas importante de otra clase

Cuando le das a CTRL + MAY + O, si hay dos clases iguales tienes que elegir la apropiada y creo que has elegido la que no es

Si es así importa la que te he puesto o modifica la línea

Ya me cuentas

Saludos

neovin
17/11/10, 13:43:43
Efectivamente, era lo que apuntabas.

Ya está resuelto. Hasta funciona y todo :D

De todas formas me gustaría saber que opinas respecto a esto que me tiene mosqueao:

- Si cambio el codigo del main layout sin haber generado en strings las correspondientes variables a las que menciono, evidentemente sale el error, pero es más si entonces creo el otro layout frmmensaje.xlm es entonces cuando la clase R no se actualiza y no crea el frmmensaje. Sin embargo, si creo primero el frmmensaje.xlm antes de cambiar el codigo al main, entonces si que me lo crea en la clase R. ¿crees que es esto normal?
- Por último, creo que para no tener problemas lo mejor es ir de principio a fin, si se van a usar variables en un layout, creo primero las variables y luego hago el layout. Si en una clase voy a usar un layout con unos componentes determinados, creo primero el layout con tales componentes primero y despues creo la clase. Al final creo que el copy paste de los tutos sin tener un procedimiento válido es lo que me desconcertaba. Independientemente de todo, ¿crees normal que los errores bloqueen por completo la clase R?

Te digo algo más en privado.
Muchas gracias por todo, al menos he terminado el tuto y he recuperado la ilusión.
Saludos.

javielinux
18/11/10, 07:59:40
Me alegro que hayas recuperado la ilusión, eso era importante ;-)

Lo de la actualización de la clase R a mi no me pasa, ni en Ubuntu ni en Windows

No se que puede estar pasando :-(

neovin
19/11/10, 19:35:58
Bueno, al menos hemos recuperado la mayor :ok:
Estoy haciendo un truco que para lo poco que he hecho me funciona. Lo pongo aquí para que quede mas o menos solucionado el post.
Siempre tenemos un AndroidManifest.xml en cualquier proyecto y en el su codigo se hace mencion al paquete que contiene la clase R mediante
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.neoviri.holausuario"
android:versionCode="1"
android:versionName="1.0">
Bien, si cambio el nombre al paquete en el codigo, el proyecto, tras preguntarme si quiero cargarme el anterior, me recompila una clase R nueva en otro paquete con el nombre que hemos indicado. Para evitar posibles problemas que desconozca, tras este pequeño truco, vuelvo al nombre original, recompilando nuevamente la clase R y recogiendo cualquier problema de referencias que tuviese.
Rudimentario pero hasta el momento efectivo.

Te he dejado un nuevo privado. Gracias.
Saludos.

pmaicas
20/11/10, 11:00:30
Si de lo que se trata es de recompilar completamente, puedes usar el menú Project - Clean, y si tiene seleccionado Build Automatically se recompilará todo de nuevo, y en caso conmtrario lo haces con Project - Build

neovin
23/11/10, 19:21:34
Si de lo que se trata es de recompilar completamente, puedes usar el menú Project - Clean, y si tiene seleccionado Build Automatically se recompilará todo de nuevo, y en caso conmtrario lo haces con Project - Build

Gracias pmaicas por tu apunte. Veo que es bastante más serio que mi chapuza. :D
Disculpa por no responder antes.

Saludos.

hofstatder
19/01/12, 14:02:58
Buenas, a mi me estaba pasando algo como a ti.

Estoy siguiendo el tutorial de sgoliver, pero me he atascado porque me pasaba lo mismo con la clase R. Si importaba su proyecto, no tenía problema alguno, pero si empezaba yo desde 0 me pasaba lo mismo que a ti.

He visto este post, y he intentado hacer lo mismo que tu, pero lo que me pasa a mi a hora es que el emulador no quiere cargar la aplicación!!!

en la consola de eclipse se me queda en wait home... y por mucho que espere nada. Antes si lo hacía pero ahora ni eso, y me está pasando como te pasaba a ti, me estoy desesperando con esta historia ya...

kriogeN
19/01/12, 21:30:41
Tu problema es simple y llanamente que no sabes Java, porque si no sabes porque tienes que ir importando tienes un problema de base.

Es lo mismo que si un programador de C dice "¿Por qué tengo que poner #include <stdio.h>?.

Esto no es culpa de Android ni de Google, en todo caso será culpa de los diseñadores de Java (aunque uno de ellos es el CEO actual de Google), pero tampoco es así. Hay que tener conceptos básicos sobre Java antes de meterse de lleno con Android.