Androide; Declarar edittext en el cuerpo de la clase (Fuera de cualquier método)

Tengo experiencia con lenguajes de programación, pero soy un poco nuevo para la programación de Android.

Tengo un programa con algunos campos que funcionan como etiquetas (textview), botones, y entrada de datos (edittext).

Siempre que los declaro al principio del programa de cualquier método (pero en la clase por supuesto), cuando comienzo mi aplicación se bloquea y la simulación da una "desafortunadamente, su programa ha parado" alerta.

Eclipse no da ningún error para la declaración e hice uso de la misma manera para definir variables regulares sin ningún problema. También da el mismo error cuando declaro un objeto mediaplayer en el cuerpo de la clase.

¿Alguien sabe por qué da error? Y hay otra manera de declarar objetos globales como edittext, viewtext, etc … Declararlos una y otra vez en los métodos suena raro para mí.

¡¡Gracias!!

public class TrainerActivity extends Actividad {

Button stopTimer = (Button)findViewById(R.id.StopTimer); Button startTimer = (Button)findViewById(R.id.StartTimer); EditText totalTime = (EditText)findViewById(R.id.TotalTime); EditText enterMin = (EditText)findViewById(R.id.EnterMin); EditText enterSec = (EditText)findViewById(R.id.EnterSec); private boolean breaker = false; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); startTimer.setOnClickListener(new View.OnClickListener() { public void onClick(View v) { // TODO Auto-generated method stub Button_StartTimer(); } }); stopTimer.setOnClickListener(new View.OnClickListener() { public void onClick(View v) { // TODO Auto-generated method stub Button_StopTimer(); } }); } 

Sin ver el código de ejemplo de lo que estás tratando es imposible decir de manera definitiva (no hacemos la mente de lectura aquí). Pero déjame adivinar, ¿estás haciendo algo como esto? …

 public class MyActivity extends Activity { TextView tv1; // This is fine. TextView tv2 = (TextView) findViewById(R.id.textview2); // Don't do this. @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); tv1 = (TextView) findViewById(R.id.textview1); // This is fine tv1.setText("Some text"); // This works tv2.setText("Some text"); // NullPointerException here } } 

El tv2.setText(...) fallará porque utilizaste findViewById(...) ANTES de llamar a setContenetView(...) y como resultado, tv2 será null.

Es bastante aceptable declarar sus widgets como miembros de instancia en su Activity pero no intente usar findViewById(...) hasta findViewById(...) DESPUÉS de haber configurado su vista de contenido.

¿Puede publicar un poco de código de ejemplo que ilustra el problema? Está bien para declarar una variable miembro que es un EditText o TextView en la clase.

logcat (en DDMS) debe ser darle algo de información sobre el error también. Si está utilizando eclipse hay una pestaña para DDMS, si no, sólo puede ejecutar DDMS desde una línea de comandos, mirar la pestaña logcat y lanzar su aplicación (con su teléfono conectado a través de usb, por supuesto.) Usted debería ser capaz de ver el error real que se informa.

Puede declarar estas variables dentro del cuerpo de la clase o dentro del cuerpo del método. En el primer caso, las variables son globales y por lo tanto se puede acceder dentro de toda la clase; en este último caso, son locales y por lo tanto sólo se puede acceder dentro de ese método. Ambos se pueden ver comúnmente en proramming.

En Android, la aplicación típica es que declare las variables en el cuerpo de la clase e instáncielas en el método onCreate (). Algo como esto:

 public Class MyClass extends Activity{ TextView label;// so this variable can be accessed within any methods in this Class @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(Bundle savedInstanceState); setContentView(R.layout.main) // load the layout of the activity label=(TextView)findViewById(R.id.<the TextView id defined in the layout file>); //this variable get instantiated. From now on you can manipulate it anywhere inside the class. Button submit=(Button)findViewById(R.id.<the Button id defined in the layout file>);//you declared and instantiated it, but it could only be used within this method since you declared it here. } } 

Si acaba de declarar una variable en el cuerpo de la clase, en la mayoría de los caeses, no puede usarla hasta que instancia, ya que son null antes de la instancia. Creo que es por eso que tienes problemas. Por favor, publique el logcat para que podamos especificar el problema real.

intente declarar los nombres de los objetos del widget sólo fuera del método onCreate ()

 Button stopTimer; Button startTimer; EditText totalTime; EditText enterMin; EditText enterSec; 

luego inicializarlos después de setContentView () dentro onCreate ()

 setContentView(R.layout.main); stopTimer = (Button)findViewById(R.id.StopTimer); startTimer = (Button)findViewById(R.id.StartTimer); totalTime = (EditText)findViewById(R.id.TotalTime); enterMin = (EditText)findViewById(R.id.EnterMin); enterSec = (EditText)findViewById(R.id.EnterSec); 
  • Cómo comprobar rápidamente si el servidor de URL está disponible
  • Decodificar archivo de imagen SVG (codificado como base64) en java
  • Utilice la biblioteca AppCompat para la compatibilidad con ActionBar
  • ¿Puedo procesar anotaciones jaxb en tiempo de compilación?
  • ¿Cómo se determina la latencia de audio (AudioTrack) en Android?
  • Android ProGuard: no se puede encontrar la clase referenciada
  • ¿Cómo llamar a un método cada vez que se está viendo una actividad?
  • El tipo está obsoleto
  • ¿Cómo comprobar si Handler tiene una tarea activa?
  • Usando strings.xml con Android
  • Esperando hasta que la ubicación esté encendida después de encenderla a través de la alerta de servicios de ubicación
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.