Notas varias

Logs

  1. Importar android.util.Log
  2. Establecer un TAG para filtrar los logs en el LogCat
  3. Usar Log.inicial_del_método(TAG, "mi mensaje");
    1. d = debug, v = verbose, w = warning...
import android.util.Log;
//...
public class MiActivity extends Activity {
    final String TAG = "ejemplos_android";
//...
    protected void onCreate(Bundle b) {
//Hace algo
              Log.d(TAG,"Procesado " + variable);
http://developer.android.com/reference/android/util/Log.html
logcat.png

Notificaciones toast

En 2 pasos:
Toast toast = Toast.makeText(contexto,mensaje,duración);
toast.show()
En 1 paso:
Toast.makeText(this, R.string.miAtributo, Toast.LENGTH_SHORT).show();
  • Contexto: this; NombreActividad.this; variableContexto;
  • Duración puede ser Toast.LENGTH_SHORT o Toast.LENGTH_LONG.
  • Si se inician varios toast seguidos no se machacan, se van mostrando secuencialmente.

Visibilidad

Elemento del layout xml....
código Java de la activity
Efecto en la maquetación del layout
android:visibility="visible"
miboton.setVisibility(View.VISIBLE);

android:visibility="invisible"
miboton.setVisibility(View.INVISIBLE);
El espacio sigue reservado
android:visibility="gone"
miboton.setVisibility(View.GONE);
El elemento es eliminado

Recibir texto de EditText

EditText no devuelve String sino CharSequence - necesita conversión.
Comprobar que no está vacío:
private boolean isEmpty(EditText etText) {
        return etText.getText().toString().trim().length() == 0;
}
Si lo usamos en varios sitios, podemos crear una clase de utilidad e incluirlo como método público y estático.



Errores típicos

Declarar e instanciar elementos

  • Declarar controles en métodos nos obliga a hacerlos finales y dificulta su reutilización; mejor situarlos en la activity correspondiente.
  • No incluir nada (instanciar los elementos p.ej.) antes de super.onCreate ysetContentView en el método onCreate. Puede que no esté listo.
  • Si se olvida uno de instanciar elementos, los errores no son claros.
public class MainActivity extends Activity {
    final String TAG = "Ej4_2_p33";
    Context miContexto;
    Button botonRojo;
    RelativeLayout layout;
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
 
        miContexto=this;
        botonRojo  = (Button) findViewById(R.id.botonRojo);
        botonVerde = (Button) findViewById(R.id.botonVerde);
        layout = (RelativeLayout) findViewById(R.id.relativeLayout1);
        // ...

Importar un R inadvertidamente

Típico cuando copiamos código de otros proyectos, Eclipse puede incluir un R del proyecto de origen y llenará nuestro código de errores.



Curiosidades sobre seguridad

Caso práctico sobre la importancia de los permisos en android: http://www.elladodelmal.com/2014/01/la-estafa-de-la-linterna-molona-que.html
Más ejemplos de malware http://www.elladodelmal.com/search/label/Android