setText no muestra un número como texto en un TextView

3 minutos de lectura

setText no muestra un número como texto en un TextView
jpgerb

Tengo 4 botones y 1 TextView. Quiero que cada uno de los botones sume o reste una cantidad diferente del valor (analizado a int) en TextView. Cuando hago clic en uno de los botones, arroja errores fatales (enumerados a continuación). He buscado en otras discusiones de Stackoverflow y nada parece funcionar. Esta es mi actividad actual:

public class PaydownSnowball extends Activity {
int aAmt;
String debtExtraPayment;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.snowball);

    final Button plusTen = (Button) findViewById(R.id.buttonp10);
    final Button plusFive = (Button) findViewById(R.id.buttonp5);
    final Button minusFive = (Button) findViewById(R.id.buttonm5);
    final Button minusTen = (Button) findViewById(R.id.buttonm10);

    SharedPreferences sharedPref= getSharedPreferences("chaosdatasnowball", 0);
    debtExtraPayment = sharedPref.getString("debtExtraPayment", null);
    debtExtraPayment ="0";
    TextView addAmount = (TextView) findViewById(R.id.dispAddAmt);
    addAmount.setText(debtExtraPayment);
    aAmt = Integer.parseInt(debtExtraPayment);


    plusTen.setOnClickListener(new OnClickListener() {
        public void onClick(View v) {
          aAmt = aAmt + 10;
          TextView addAmount = (TextView) findViewById(R.id.dispAddAmt);
          addAmount.setText(aAmt);
        }
      });
    plusFive.setOnClickListener(new OnClickListener() {
        public void onClick(View v) {
          aAmt = aAmt + 5;
          TextView addAmount = (TextView) findViewById(R.id.dispAddAmt);
          addAmount.setText(aAmt);
        }
      });
    minusTen.setOnClickListener(new OnClickListener() {
        public void onClick(View v) {
          aAmt = aAmt - 10;
          TextView addAmount = (TextView) findViewById(R.id.dispAddAmt);
          addAmount.setText(aAmt);
        }
      });
    minusFive.setOnClickListener(new OnClickListener() {
        public void onClick(View v) {
          aAmt = aAmt - 5;
          TextView addAmount = (TextView) findViewById(R.id.dispAddAmt);
          addAmount.setText(aAmt);
        }
      });


    debtExtraPayment = String.valueOf(aAmt);
    addAmount.setText(debtExtraPayment);

    SharedPreferences.Editor editor= sharedPref.edit();
    editor.putString("debtExtraPayment", debtExtraPayment).commit();
}

Estos son los logcats que ocurren al hacer clic en el botón plusFive:

11-09 15:15:57.907: E/AndroidRuntime(695): FATAL EXCEPTION: main
11-09 15:15:57.907: E/AndroidRuntime(695): android.content.res.Resources$NotFoundException: String resource ID #0x5
11-09 15:15:57.907: E/AndroidRuntime(695):  at android.content.res.Resources.getText(Resources.java:201)
11-09 15:15:57.907: E/AndroidRuntime(695):  at android.widget.TextView.setText(TextView.java:2817)
11-09 15:15:57.907: E/AndroidRuntime(695):  at biz.midl.debtsnowball.PaydownSnowball$2.onClick(PaydownSnowball.java:47)
11-09 15:15:57.907: E/AndroidRuntime(695):  at android.view.View.performClick(View.java:2408)
11-09 15:15:57.907: E/AndroidRuntime(695):  at android.view.View$PerformClick.run(View.java:8816)
11-09 15:15:57.907: E/AndroidRuntime(695):  at android.os.Handler.handleCallback(Handler.java:587)
11-09 15:15:57.907: E/AndroidRuntime(695):  at android.os.Handler.dispatchMessage(Handler.java:92)
11-09 15:15:57.907: E/AndroidRuntime(695):  at android.os.Looper.loop(Looper.java:123)
11-09 15:15:57.907: E/AndroidRuntime(695):  at android.app.ActivityThread.main(ActivityThread.java:4627)
11-09 15:15:57.907: E/AndroidRuntime(695):  at java.lang.reflect.Method.invokeNative(Native Method)
11-09 15:15:57.907: E/AndroidRuntime(695):  at java.lang.reflect.Method.invoke(Method.java:521)
11-09 15:15:57.907: E/AndroidRuntime(695):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
11-09 15:15:57.907: E/AndroidRuntime(695):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
11-09 15:15:57.907: E/AndroidRuntime(695):  at dalvik.system.NativeStart.main(Native Method)
11-09 15:15:59.467: I/Process(695): Sending signal. PID: 695 SIG: 9

setText no muestra un número como texto en un TextView
codigomagia

El problema es con líneas como esta.

addAmount.setText(aAmt);

donde aAmt es un int. Esto busca un resource con el id de cualquier cosa aAmt es. Tienes que lanzarlo a un String Primer me gusta

addAmount.setText(String.valueOf(aAmt));

hay sobrecargados setText() métodos. ver los documentos

Esta publicación entra en más detalles sobre cómo funciona esto realmente

  • De acuerdo, consulte el enlace a los documentos anteriores para que comprenda la diferencia y por qué.

    – código mágico

    09 nov.

  • o addAmount.setText("" + aAmt);

    – wvdz

    09 nov.


  • Los estoy leyendo – muchas gracias – @popovitisj – ¡gracias también!

    – jpgerb

    09 nov.

  • Sí, hay diferentes maneras de lograr esto. El punto es que tiene que ser un String para lograr el objetivo aquí. Usualmente uso la forma en que publiqué porque creo que es más explícito de lo que está sucediendo, pero hay varias formas de hacerlo realidad.

    – código mágico

    09 nov.


setText no muestra un número como texto en un TextView
Rakesh Dey

Puedes probar uno de estos dos:

  1. addAmount.setText("" + aAmt);
  2. addAmount.setText(String.valueOf(aAmt));

obtendrá un resultado de cadena sin ningún error.

.

¿Ha sido útil esta solución?