2012-05-13 6 views
0

初めてのAndroid Javaプログラム、摂氏と華氏の変換を行いました。これは最初はうまくいきますが、数回のコンバージョンが行われてもコンバージョンは行われません。値を変更してボタンを押すと、フィールドは更新されません。Androidプログラムがいくつかの使用の後に動作しなくなる

ここにコードがあります。

package fi.peltoset.mikko.celfahr; 

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

public class Celfahr extends Activity { 
    private double celsius = 0.0; 
    private double fahrenheit = 0.0; 

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

    Button celsiusasteiksi = (Button) findViewById(R.id.celsiusasteiksi); 
    Button fahrenheiteiksi = (Button) findViewById(R.id.fahrenheitasteiksi); 

    celsiusasteiksi.setOnClickListener(new View.OnClickListener() { 
     public void onClick(View v) { 
      fahrenheit = Double.parseDouble(((EditText) 
        findViewById(R.id.fahrenheitkentta)).getText().toString());   
      ((EditText) findViewById(R.id.celciuskentta)).setText(
        String.valueOf(pyorista((fahrenheit - 32)/1.8))); 
     } 
    }); 

    fahrenheiteiksi.setOnClickListener(new View.OnClickListener() { 
     public void onClick(View v) { 
      celsius = Double.parseDouble(((EditText) findViewById(R.id.celciuskentta)) 
        .getText().toString());  
      ((EditText) findViewById(R.id.fahrenheitkentta)) 
        .setText(String.valueOf(pyorista(celsius * 1.8 + 32))); 
     } 
    }); 
    }  

    double pyorista(double d) { 
    DecimalFormat df = new DecimalFormat("#.#"); 
    return Double.valueOf(df.format(d)); 
    } 
} 

ありがとうございます(フィンランド語、heh ...)。

+0

ここで、入力テキスト(変換したい値)を入力しますか? – Blackbelt

+1

あなた自身の正気のために、あなたの編集テキストを作成して、毎回そのビューを見つけるのではなく、それらを参照するのがずっと簡単です。既にボタンのために行ったように – Tony

+1

EditTextフィールドはクリックごとに再初期化されます。問題に関連している可能性があります。リスナーを設定する前にフィールドとして使用して一度だけ初期化することはできますか? – Ostkontentitan

答えて

2

I、および他の人は、スタータのためにこれをお勧め:あなたが戻って文字列にダブルにpyorista()からの結果を変換する必要はありませんので、

public class Celfahr extends Activity { 
    private double celsius = 0.0; 
    private double fahrenheit = 0.0; 
    private EditText celsiuskentta; 
    private EditText fahrenheitkentta; 

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

     Button celsiusasteiksi = (Button) findViewById(R.id.celsiusasteiksi); 
     Button fahrenheiteiksi = (Button) findViewById(R.id.fahrenheitasteiksi); 
     celsiuskentta = (EditText) findViewById(R.id.celciuskentta); 
     fahrenheitkentta = (EditText) findViewById(R.id.fahrenheitkentta) 

     celsiusasteiksi.setOnClickListener(new View.OnClickListener() { 
      public void onClick(View v) { 
       fahrenheit = Double.parseDouble(fahrenheitkentta.getText().toString());   
       celsiuskentta.setText(String.valueOf(pyorista((fahrenheit - 32)/1.8))); 
      } 
     }); 

     fahrenheiteiksi.setOnClickListener(new View.OnClickListener() { 
      public void onClick(View v) { 
       celsius = Double.parseDouble(celsiuskentta.getText().toString()); 
       fahrenheitkentta.setText(String.valueOf(pyorista(celsius * 1.8 + 32))); 
      } 
     }); 
    }  
... 

はまたのDecimalFormatは、フォーマットされた文字列を返します。申し訳ありませんがフィンランドの言葉が間違っている場合は、これが役立つことを願っています。

+0

それは少し読めません:p – keyser

+0

@Keyser合意しましたが、私は_whole_アプリを書き直すつもりはなく、無関係な 'findViewById()'を取り除くだけでした。表示はときどき説明するよりも優れています。 – Sam

+0

Yも同意した。 – keyser

関連する問題