Programación y Desarrollo para Android Subforo exclusivo para temas de programación de software para PDAs y desarrollo de aplicaciones, interfaces, etc bajo Android


 
Herramientas
  #1  
Viejo 15/03/11, 00:48:56
Avatar de normion
normion normion no está en línea
Usuario novato en la web
Mensajes: 4
 
Fecha de registro: mar 2011
Localización: Sevilla
Mensajes: 4
Modelo de smartphone: Samsung I9000
Tu operador: Vodafone
Mencionado: 0 comentarios
Tagged: 0 hilos
Problema con declaración de controles(botón)

Saludos, mi problema es que tengo un código que en teoría debería funcionar y de hecho compila, pero cuando lo ejecuto en el emulador me da un force close y se acabo. He ido quitando partes del código hasta que he dado con lo que falla y es con la declaración de los botones que creo en main.xml

El codigo completo es:

Código:
import android.app.Activity;
import android.widget.Button;
import android.os.Bundle;
import android.view.View;
import android.util.Log;
import android.media.MediaPlayer;

import java.io.IOException;

public class Reproductor extends Activity {
	
	
	private static final String LOG_TAG = "AudioRecordTest";
    private static String mFileName = null;

    final Button btnStart = (Button)findViewById(R.id.btnStart);
    final Button btnStop = (Button)findViewById(R.id.btnStop);
    private MediaPlayer   mPlayer = null;
    
    
    /** Called when the activity is first created. */
    @override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
       
        btnStart.setOnClickListener(new View.OnClickListener() {
            
            public void onClick(View arg0)
            {
            	mFileName = "http://62.212.74.140:8206/listen.pls";
            	startPlaying();
            }
        });
        
        btnStop.setOnClickListener(new View.OnClickListener() {
            
            public void onClick(View arg0)
            {
            	stopPlaying();
            }
        });
        
        
    }
    private void startPlaying() {
    	 mPlayer = new MediaPlayer();
         try {
             mPlayer.setDataSource(mFileName);
             mPlayer.prepare();
             mPlayer.start();
         } catch (IOException e) {
             Log.e(LOG_TAG, "prepare() failed");
         }
    }
    
    private void stopPlaying() {
        mPlayer.release();
        mPlayer = null;
    }
    
    
}
Concretamente el "codigo maligno" es este:

Código:
   final Button btnStart = (Button)findViewById(R.id.btnStart);
    final Button btnStop = (Button)findViewById(R.id.btnStop);
Alguien sabe que puede estar fallando??? Me tiene loco...
Responder Con Cita


  #2  
Viejo 15/03/11, 13:28:54
Avatar de mekawendie
mekawendie mekawendie no está en línea
Miembro del foro
Mensajes: 498
 
Fecha de registro: ene 2011
Localización: Salamanca
Mensajes: 498
Modelo de smartphone: Xiaomi Mi 9
Tu operador: Yoigo
Mencionado: 1 comentarios
Tagged: 0 hilos
Puedes poner la parte del main.xml donde pintas los botones?
Responder Con Cita
  #3  
Viejo 15/03/11, 22:31:53
Avatar de normion
normion normion no está en línea
Usuario novato en la web
Mensajes: 4
 
Fecha de registro: mar 2011
Localización: Sevilla
Mensajes: 4
Modelo de smartphone: Samsung I9000
Tu operador: Vodafone
Mencionado: 0 comentarios
Tagged: 0 hilos
Si, por supuesto. Es este:

Código:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="horizontal">
 
    <Button android:id="@+id/btnStart"
    android:text="Play"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content" />
    
    <Button android:id="@+id/btnStop"
    android:text="Stop"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content" />
    



</LinearLayout>
Muchas gracias por el interés!!
Responder Con Cita
  #4  
Viejo 15/03/11, 23:16:54
Avatar de Duqe
Duqe Duqe no está en línea
Usuario veterano
Mensajes: 668
 
Fecha de registro: jun 2009
Mensajes: 668
Modelo de smartphone: Nexus One
Versión de ROM: SuperFroyo 6.0
Mencionado: 0 comentarios
Tagged: 0 hilos
Te has fijado en el Logcat? Suele darte pistas de donde viene el error.
Responder Con Cita
  #5  
Viejo 16/03/11, 12:53:41
Avatar de adk
adk adk no está en línea
Miembro del foro
Mensajes: 166
 
Fecha de registro: abr 2010
Mensajes: 166
Modelo de smartphone: Galaxy Nexus
Tu operador: Pepephone
Mencionado: 2 comentarios
Tagged: 0 hilos
Tienes varios errores:
  • No puedes declarar como final un objeto que quieres modificar.
  • No puedes utilizar una llamada a un método cuando declaras una variable a nivel de instancia

Por lo que el código que tendría que funcionar es:
Código:
import android.app.Activity;
import android.widget.Button;
import android.os.Bundle;
import android.view.View;
import android.util.Log;
import android.media.MediaPlayer;

import java.io.IOException;


public class Reproductor extends Activity {
	
	
    private static final String LOG_TAG = "AudioRecordTest";
    private static String mFileName = null;

    private Button btnStart ;
    private Button btnStop;
    private MediaPlayer   mPlayer = null;
    
    
    /** Called when the activity is first created. */
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.prueba);
        
        btnStart = (Button)findViewById(R.id.btnStart);
        btnStop = (Button)findViewById(R.id.btnStop);
       
        btnStart.setOnClickListener(new View.OnClickListener() {
            
            public void onClick(View arg0)
            {
            	mFileName = "http://62.212.74.140:8206/listen.pls";
            	startPlaying();
            }
        });
        
        btnStop.setOnClickListener(new View.OnClickListener() {
            
            public void onClick(View arg0)
            {
            	stopPlaying();
            }
        });
        
        
    }
    private void startPlaying() {
    	 mPlayer = new MediaPlayer();
         try {
             mPlayer.setDataSource(mFileName);
             mPlayer.prepare();
             mPlayer.start();
         } catch (IOException e) {
             Log.e(LOG_TAG, "prepare() failed");
         }
    }
    
    private void stopPlaying() {
        mPlayer.release();
        mPlayer = null;
    }
    
    
}
Responder Con Cita
  #6  
Viejo 16/03/11, 18:52:18
Avatar de normion
normion normion no está en línea
Usuario novato en la web
Mensajes: 4
 
Fecha de registro: mar 2011
Localización: Sevilla
Mensajes: 4
Modelo de smartphone: Samsung I9000
Tu operador: Vodafone
Mencionado: 0 comentarios
Tagged: 0 hilos
Adk, gracias. El problema era lo de declararlo antes de invocar a main a traves de R, lo de fianl esta bien. Me di cuenta anoche despues de probar mil veces y ahora funciona maravillosamente Siento no haber actualizado mis avances antes.
Gracias a todos!!
Responder Con Cita
  #7  
Viejo 16/03/11, 19:12:49
Avatar de mekawendie
mekawendie mekawendie no está en línea
Miembro del foro
Mensajes: 498
 
Fecha de registro: ene 2011
Localización: Salamanca
Mensajes: 498
Modelo de smartphone: Xiaomi Mi 9
Tu operador: Yoigo
Mencionado: 1 comentarios
Tagged: 0 hilos
Exacto, debes crear la instancia del control en el OnCreate después de haber establecido el ContentView, en tu caso el main.

Si no, al llamar a findViewById te dará un nullpointerexception ya que no tiene un Content donde buscar y se vuelve to locooooo !!!

Suerte con ese reproductor!
Responder Con Cita
  #8  
Viejo 01/04/11, 02:05:37
Avatar de czuniga
czuniga czuniga no está en línea
Usuario novato en la web
Mensajes: 28
 
Fecha de registro: jul 2009
Localización: San Jose Costa Rica
Mensajes: 28
Modelo de smartphone: HTC EVO 3D X515m
Versión de ROM: Android 2.3.4
Tu operador: Movistar
Mencionado: 0 comentarios
Tagged: 0 hilos
hola compañeros, les dejo un link d descarga , es un sistemita de android para la d2, despues de una pequeñas modificaciones, como quitar un programa y poner otro, funciono muy bien, quiza les sirva de algo, saludos.
http://www.4shared.com/dir/i7-s8TgE/androitopaswm6.html
Responder Con Cita
  #9  
Viejo 01/04/11, 09:21:44
Avatar de pmaicas
pmaicas pmaicas no está en línea
Desarrollador
Mensajes: 1,299
 
Fecha de registro: dic 2008
Mensajes: 1,299
Mencionado: 25 comentarios
Tagged: 0 hilos
Tienes el código que inicializa las variables Button fuera del método onCreate, cuando todavía no se ha cargado el layout y por lo tanto findViewById devolverá null.
Responder Con Cita
  #10  
Viejo 26/04/11, 10:35:13
Avatar de luisv69
luisv69 luisv69 no está en línea
Usuario novato en la web
Mensajes: 3
 
Fecha de registro: mar 2010
Mensajes: 3
Modelo de smartphone: tatoo
Mencionado: 0 comentarios
Tagged: 0 hilos
Hola, podeis poner el código? porque yo estaba con lo mismo y tenia problemas parecidos, solo que ahora no se me para, es decir, le doy al play y no va ya el stop ni nada me dice que no responde.
muchas gracias
Responder Con Cita
Respuesta

Estás aquí
Regresar   HTCMania > Todo sobre Android > Programación y Desarrollo para Android

Herramientas

Reglas de Mensajes
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Las caritas están On
Código [IMG] está On
Código HTML está Off

Saltar a Foro



Hora actual: 21:57:07 (GMT +1)

Cookies settings
Powered by vBulletin™
Copyright © vBulletin Solutions, Inc. All rights reserved.
 
HTCMania: líderes desde el 2007