2010-12-06 2 views
0

Я пытаюсь написать простое приложение для Android, чтобы помочь интерпретировать некоторые результаты лабораторных исследований.Как обрабатывать onClickListener в android?

 
package org.android.bloodgas; 

import android.app.Activity; 
import android.os.Bundle; 
import android.view.View; 
import android.widget.TextView; 
import android.widget.Button; 

public class pinit extends Activity { 


    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 

     Button interpretButton = (Button) findViewById(R.id.Interpret); 

     //interpretButton.setOnClickListener(this); 
     View.OnClickListener myhandler = new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
        float inpPH, inpPO2, inpPCO2, inpHCO3, inpBE; 
        inpPH = Float.valueOf(findViewById(R.id.InpPH).toString()).floatValue(); 
        inpPO2 = Float.valueOf(findViewById(R.id.InpO2).toString()).floatValue(); 
        inpPCO2 = Float.valueOf(findViewById(R.id.InpCO2).toString()).floatValue(); 
        inpHCO3 = Float.valueOf(findViewById(R.id.InpHCO3).toString()).floatValue(); 
        inpBE = Float.valueOf(findViewById(R.id.InpBE).toString()).floatValue(); 

        TextView interpretation; 
        interpretation = (TextView) findViewById(R.id.Interpretation); 

        String sResult = null; 
        if (inpPH < 7.35) { 
         // Acidosis 
         sResult.concat("Acidosis. "); 
        } else { 
         if (inpPH > 7.45) { 
          // Alkalosis 
          sResult.concat("Alkalosis. "); 
         } else { 
          // Normal acidity, 7.35-7.45 
          sResult.concat("Normal pH. "); 
         } 
        } 
        interpretation.setText(sResult); 
      } 
     }; 

     interpretButton.setOnClickListener(myhandler); 

    } 

} 

Он скомпилировать и запустить, но при нажатии на кнопку «истолковать» он просто говорит, что приложение ... неожиданно остановился. Пожалуйста, попробуйте еще раз. (Принудительное закрытие).

Я совершенно не знаком с программированием на Android ... Поэтому я думаю, что это была бы какая-то глупая ошибка, которую я сделал, но, пожалуйста, помогите. Благодарю.

обновление: изменил код на это (минус логическая часть, пока я закончу позже) , но все равно зависает, когда нажимает на кнопку.

 
package org.android.bloodgas; 

import android.app.Activity; 
import android.os.Bundle; 
import android.view.View; 
import android.widget.EditText; 
import android.widget.Button; 

public class Pinit extends Activity { 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 

     Button interpretButton = (Button) findViewById(R.id.Interpret); 

     View.OnClickListener myhandler = new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
        float inpPH, inpPO2, inpPCO2, inpHCO3, inpBE; 
        inpPH = Float.valueOf(((EditText) Pinit.this.findViewById(R.id.InpPH)).toString()).floatValue(); 
        inpPO2 = Float.valueOf(((EditText) Pinit.this.findViewById(R.id.InpO2)).toString()).floatValue(); 
        inpPCO2 = Float.valueOf(((EditText) Pinit.this.findViewById(R.id.InpCO2)).toString()).floatValue(); 
        inpHCO3 = Float.valueOf(((EditText) Pinit.this.findViewById(R.id.InpHCO3)).toString()).floatValue(); 
        inpBE = Float.valueOf(((EditText) Pinit.this.findViewById(R.id.InpBE)).toString()).floatValue(); 
        // ... 
      } 
     }; 

     interpretButton.setOnClickListener(myhandler); 

    } 

} 

LogCat:

 
12-07 03:37:02.231: WARN/dalvikvm(1074): threadid=1: thread exiting with uncaught exception (group=0x4001d800) 
12-07 03:37:02.332: ERROR/AndroidRuntime(1074): FATAL EXCEPTION: main 
12-07 03:37:02.332: ERROR/AndroidRuntime(1074): java.lang.NumberFormatException: [email protected] 
12-07 03:37:02.332: ERROR/AndroidRuntime(1074):  at org.apache.harmony.luni.util.FloatingPointParser.initialParse(FloatingPointParser.java:130) 
12-07 03:37:02.332: ERROR/AndroidRuntime(1074):  at org.apache.harmony.luni.util.FloatingPointParser.parseFloat(FloatingPointParser.java:319) 
12-07 03:37:02.332: ERROR/AndroidRuntime(1074):  at java.lang.Float.parseFloat(Float.java:291) 
12-07 03:37:02.332: ERROR/AndroidRuntime(1074):  at java.lang.Float.valueOf(Float.java:330) 
12-07 03:37:02.332: ERROR/AndroidRuntime(1074):  at org.android.bloodgas.Pinit$1.onClick(Pinit.java:22) 
12-07 03:37:02.332: ERROR/AndroidRuntime(1074):  at android.view.View.performClick(View.java:2408) 
12-07 03:37:02.332: ERROR/AndroidRuntime(1074):  at android.view.View$PerformClick.run(View.java:8816) 
12-07 03:37:02.332: ERROR/AndroidRuntime(1074):  at android.os.Handler.handleCallback(Handler.java:587) 
12-07 03:37:02.332: ERROR/AndroidRuntime(1074):  at android.os.Handler.dispatchMessage(Handler.java:92) 
12-07 03:37:02.332: ERROR/AndroidRuntime(1074):  at android.os.Looper.loop(Looper.java:123) 
12-07 03:37:02.332: ERROR/AndroidRuntime(1074):  at android.app.ActivityThread.main(ActivityThread.java:4627) 
12-07 03:37:02.332: ERROR/AndroidRuntime(1074):  at java.lang.reflect.Method.invokeNative(Native Method) 
12-07 03:37:02.332: ERROR/AndroidRuntime(1074):  at java.lang.reflect.Method.invoke(Method.java:521) 
12-07 03:37:02.332: ERROR/AndroidRuntime(1074):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868) 
12-07 03:37:02.332: ERROR/AndroidRuntime(1074):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626) 
12-07 03:37:02.332: ERROR/AndroidRuntime(1074):  at dalvik.system.NativeStart.main(Native Method) 
12-07 03:37:02.382: WARN/ActivityManager(68): Force finishing activity org.android.bloodgas/.Pinit 
12-07 03:37:02.952: WARN/ActivityManager(68): Activity pause timeout for HistoryRecord{44fbfc90 org.android.bloodgas/.Pinit} 
12-07 03:37:07.761: INFO/Process(1074): Sending signal. PID: 1074 SIG: 9 
12-07 03:37:09.852: INFO/ActivityManager(68): Process org.android.bloodgas (pid 1074) has died. 
12-07 03:37:09.862: INFO/WindowManager(68): WIN DEATH: Window{44fa71e0 org.android.bloodgas/org.android.bloodgas.Pinit paused=false} 
12-07 03:37:15.931: WARN/ActivityManager(68): Activity destroy timeout for HistoryRecord{44fbfc90 org.android.bloodgas/.Pinit} 
+0

Для того, чтобы предоставить вам какую-либо помощь, вам нужно будет отправить стек из вашего логарифма. – Falmarri 2010-12-06 19:18:50

+0

update 2: Оказывается, что виновник не находится в обработчике кликов. Это проблема преобразования типов. Оказывается, строковое значение EditText запрашивается через .getText() not .toString(). Моя глупая ошибка. – bubu 2010-12-06 20:02:40

ответ

3

Первое, что я вижу, что вы должны бросить это тип зрения, что

inpPH = Float.valueOf(findViewById(R.id.InpPH).toString()).floatValue();

Во-вторых, вы звоните это изнутри onclickListener. Поэтому findViewById() действительно даже не компилируется. Вам нужно

inpPH = Float.valueOf((TypeOfView) pinit.this.findViewById(R.id.InpPH).toString()).floatValue(); 

А также в Java, классы должны начинаться с прописной lettors, поэтому она должна быть

public class Pinit extends Activity{

Update:

findViewById (R.id. InpPH) разрешается до EditTex

Нет, это не так. Он разрешает просмотр. Вызов .toString() в представлении не то, что вы хотите. Вы хотите сделать

((EditText) pinit.this.findViewById(R.id.InpPH)).getText().toString() 
+0

Хм ... но с тех пор, как findViewById (R.id.InpPH) .toString() разрешает строку, нужен ли вообще какой-либо тип? поскольку findViewById (R.id.InpPH) разрешает EditText, а метод .tostring() возвращает строку ... – bubu 2010-12-06 19:27:36

1

Я думаю, вы получите NumberFormatException на одном из вызовов, как это:

Float.valueOf(findViewById(R.id.InpPH).toString()) 

Как документ NumberFormatException приобретается, если строка имеет нулевое значение, имеет нулевую длину или не может быть проанализирован как значение поплавка.

Однако проверка трассировки logCat для этого даст чистый ответ.

Смежные вопросы