Alguien que se lleve bien con Eclipse + Android SDK

Pues eso, he hecho una mierda de calculadora (cambio de base, binaria, octal, etc, etc) pero me peta cuando la ejecuto en la maquina virtual de Android (en el entorno Eclipse)


No me da error alguno de compilacion ni Warnings, alguien familiarizado con el tema para que le envie el proyecto y le eche un ojo?


Thx y eso :3
¿No muestra ningún mensaje de error en el logcat? Has declarado la activity en el manifest?
Primero, gracias por responder amuchamu.

No, simplemente la paso al emulador, se ejecuta la aplicacion pero cuando le doy al boton "calcular" peta, sale lo de "La aplicacion talalalalala no responde y debe cerrarse". Vamos, que el error esta en el boton pero no se que peta.

La aplicacion es muy sencilla, un par de labels, 2 textview y 1 boton xD

Si alguien quiere echarle un vistazo le paso el project sin problema, pesa muy poco.

Un saludo y gracias de nuevo.
Se me hace muy raro que no te muestre ningún mensaje de error ni en el logcat, pásamela si quieres.
Claro, sin problemas.

Calculadora.java

package calculadora.de.bases;

import android.app.Activity;
import android.os.Bundle;
import android.widget.Spinner;
import android.widget.ArrayAdapter;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemSelectedListener;
import android.widget.Button;
import android.widget.Toast;
import android.widget.TextView;

public class Calculadora extends Activity {
    /** Called when the activity is first created. */
   
   String datoSpinner = "";
   
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
       
        Spinner sp = (Spinner) findViewById(R.id.spinner1);
       
        ArrayAdapter<?> adapter = ArrayAdapter.createFromResource(
                this, R.array.bases, android.R.layout.simple_spinner_item);
       
        adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
        sp.setAdapter(adapter);
       
        sp.setOnItemSelectedListener(new OnItemSelectedListener() {               
           public void onItemSelected(AdapterView<?> parentView, View selectedItemView,
                  int position, long id) {
               Toast.makeText(parentView.getContext(), "Has seleccionado Base " +
                         parentView.getItemAtPosition(position).toString(), Toast.LENGTH_LONG).show();
               datoSpinner = parentView.getItemAtPosition(position).toString();
            }
                                 
            public void onNothingSelected(AdapterView<?> parentView) {
               
            }
        });
       
        final TextView cajatexto = (TextView) findViewById(R.id.editText1);
        final TextView cajaResultado = (TextView) findViewById(R.id.EditText01);
       
        final Button buttonConvert = (Button) findViewById(R.id.button1);
        buttonConvert.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {
                // Perform action on click
               
               
               CharSequence datosCajaNumero;
               int base = Integer.parseInt(datoSpinner);
               datosCajaNumero = cajatexto.getText();
               int numero = Integer.parseInt(datosCajaNumero.toString());
               int temp = 0;
               String[] resultado = new String[100];
               int counter = 0;
               
               while (numero != 0)
               {
                  temp = (numero % base);
                  
                  if (temp < 10)
                  {
                     resultado[counter] = "" + temp;
                  }
                  else
                  {
                     switch(temp) {
                      case 10:
                         resultado[counter] = "A";
                          break;
                      case 11:
                         resultado[counter] = "B";
                          break;
                      case 12:
                         resultado[counter] = "C";
                          break;
                      case 13:
                         resultado[counter] = "D";
                          break;
                      case 14:
                         resultado[counter] = "E";
                        break;
                      case 15:
                         resultado[counter] = "F";
                          break;
                      default:
                         resultado[counter] = "Z";
                          break;
                      }
                  }
                  
                  counter ++;
               }
               String cadenaResultado = "";
               for(int i = 0; i >= resultado.length; i++)
               {
                  cadenaResultado = cadenaResultado + resultado[i];
               }
               cajaResultado.setText(cadenaResultado);
            }
        });
    }
}



Main.xml
<?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="vertical" android:focusable="false" android:filterTouchesWhenObscured="true">

    <TextView
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:gravity="center"
        android:text="@string/LabelNumber"
        android:textSize="25sp"
        android:textStyle="bold" />

    <EditText
        android:id="@+id/editText1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:inputType="number" >

        <requestFocus />
    </EditText>

    <TextView
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:gravity="center"
        android:text="@string/LabelBase"
        android:textSize="25sp"
        android:textStyle="bold" />

    <Spinner
        android:id="@+id/spinner1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />



    <Button
        android:id="@+id/button1"
        android:layout_width="170dp"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:gravity="center"
        android:text="@string/stringButton"
        android:textStyle="bold" android:textSize="20sp"/>

    <TextView
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:gravity="center"
        android:text="@string/LabelResult"
        android:textSize="25sp"
        android:textStyle="bold" />

    <EditText
        android:id="@+id/EditText01"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:inputType="number" android:gravity="center"/>

</LinearLayout>



Arrays.xml
<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string-array name="bases">
        <item>2</item>
        <item>6</item>
        <item>8</item>
        <item>10</item>
        <item>16</item>
    </string-array>
</resources>




Aun así, aqui os dejo el Project para que os lo descargueis completo:

http://dl.dropbox.com/u/2188894/CalculadoraDeBases.zip

Sobre errores, en la consola salen muchisimas cosas, yo que estoy acostumbrado a depurar mucho, con Android al ejecutarse en la maquina virtual no se hacerlo T-T

Muchisimas gracias! =D
Veamos, lo puedo instalar e iniciar sin problemas, ningún error. En número pongo cualquiera, dejo base 2, le doy a convertir y peta. El logcat dice lo siguiente:
E/AndroidRuntime( 4485): FATAL EXCEPTION: main
E/AndroidRuntime( 4485): java.lang.ArrayIndexOutOfBoundsException: length=100; index=100
E/AndroidRuntime( 4485):    at calculadora.de.bases.Calculadora$2.onClick(Calculadora.java:68)
E/AndroidRuntime( 4485):    at android.view.View.performClick(View.java:3480)
E/AndroidRuntime( 4485):    at android.view.View$PerformClick.run(View.java:13983)
E/AndroidRuntime( 4485):    at android.os.Handler.handleCallback(Handler.java:605)
E/AndroidRuntime( 4485):    at android.os.Handler.dispatchMessage(Handler.java:92)
E/AndroidRuntime( 4485):    at android.os.Looper.loop(Looper.java:137)
E/AndroidRuntime( 4485):    at android.app.ActivityThread.main(ActivityThread.java:4340)
E/AndroidRuntime( 4485):    at java.lang.reflect.Method.invokeNative(Native Method)
E/AndroidRuntime( 4485):    at java.lang.reflect.Method.invoke(Method.java:511)
E/AndroidRuntime( 4485):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
E/AndroidRuntime( 4485):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
E/AndroidRuntime( 4485):    at dalvik.system.NativeStart.main(Native Method)
W/ActivityManager(  195):   Force finishing activity calculadora.de.bases/.Calculadora


El error no tiene nada que ver con Android en sí, se refiere a la línea:
resultado[counter] = "" + temp;

Ese bucle es infinito, la condición de salida nunca se va a cumplir porque no modificas el valor de "numero" nunca, en cada iteración aumentas en 1 el valor de counter, por lo que al final acabas sobrepasando el tamaño de resultado, que es 100.

Tienes que aprender cómo funciona lo del logcat, es lo más útil. Puedes acceder desde DDMS en eclipse ( http://developer.android.com/guide/deve ... /ddms.html ) o desde una terminal mediante "adb logcat" (en Windows quizá tengas que poner la ruta a adb, ni idea).
Se me fue la cabeza, ya decia yo jajaja

Faltaba el
numero = numero / base;


El caso es que el Script lo estaba traduciendo de Python (me lo pasaron en la universidad) y claro nunca he tocado python, vengo de C++ y Java y con el eclipse (usaba Netbeans) es la primera vez que hago algo para android pues estaba mas pendiente de no cagarla con el entorno que con otra cosa.

Con lo facil que es llamar a las cosas como se han llamado toda la vida, que si ahora el combobox se llama "Spinner" que si tal, que si cual.. xD

En fin, muchas gracias, segurie probando a ver que sale =D

Ninjaedit: Ahora no peta, pero el boton no funciona, no me muestra nada en la ultima caja, le echare un ojo al Logcat, a ver que me dice...
Dasten escribió:Ninjaedit: Ahora no peta, pero el boton no funciona, no me muestra nada en la ultima caja, le echare un ojo al Logcat, a ver que me dice...


El logcat no te va a mostrar ningún mensaje de error, pues no hay ninguno, o no al menos nada que pueda detectar como error. El problema está en la condición de este for:
String cadenaResultado = "";
for(int i = 0; i >= resultado.length; i++)
{
cadenaResultado = cadenaResultado + resultado[i];
}
cajaResultado.setText(cadenaResultado);


i = 0, resultado.length = 100, i nunca va a ser mayor o igual que 100.
amuchamu escribió:
Dasten escribió:Ninjaedit: Ahora no peta, pero el boton no funciona, no me muestra nada en la ultima caja, le echare un ojo al Logcat, a ver que me dice...


El logcat no te va a mostrar ningún mensaje de error, pues no hay ninguno, o no al menos nada que pueda detectar como error. El problema está en la condición de este for:
String cadenaResultado = "";
for(int i = 0; i >= resultado.length; i++)
{
cadenaResultado = cadenaResultado + resultado[i];
}
cajaResultado.setText(cadenaResultado);


i = 0, resultado.length = 100, i nunca va a ser mayor o igual que 100.


Gracias! tambien me di cuenta de ese error, aunque se me olvido editar el post xD

En fin, ya esta hecha y terminada, si quieres que te la pase para verla dilo!

Muchisimas gracias por el interes, un saludo!
8 respuestas