2011-11-08 3 views
2

アクティビティ全体で使用できる変数はどのように定義するのですか?私は3つのonClick Listenenersを持っていて、それぞれにif else文の束を含んでいます。 1つのonClickは束を発生させ、もう1つのonClickはout.write命令を使用して計算の結果を保存します。私は他の計算がonClickルーチンの計算を私のコードのsave onClick部分に知らせるならば、二重変数を得ることに問題があります。私は本を​​読んで答えを探していますが、何も動かないようです。私は実行のonClickルーチンからの変数を含むout.writeの前に停止するためにブレークポイントを使用していますが、それらは未知の値です。私は変数がグローバルである必要があると最初に思ったが、私はそれらをアクティビティを通して利用できるようにするだけでよい。クラス全体で変数を使用する

私はたくさんの本を読んで理解しようとしましたが、私はJavaに飛び乗って3000本以上の行を書きました。すべてが入力を取得し、入力内容を決定し、結果を表示する限り、すべてが機能します。私はsdcard上に素敵な.xmlファイルを作成して、すべてのデータ結果を表示することさえできます。問題は、変数m1_sqs1_engがonCreateルーチンで不明であるout.writeコードに変数を入れようとするときです。あなたの例のように変数を定義しましたが、うまくいきませんでした。私の問題のいくつかのコード例:

public class MyActivity extends Activity { 
    private EditText m1_sqs1; 
    private Spinner m1_sqs1_spinner; 
    private double m1_sqs1_eng; 
    private double m1_sqs1_value; 

    protected onCreate(Bundle savedBundle) { 
     m1_sqs1_spinner = (Spinner) findViewById(R.id.m1_sqs1_spinner); 
     m1_sqs1 = (EditText) findViewById(R.id.m1_sqs1); 

     btnExecute.setOnClickListener(new View.OnClickListener() { 
     if (((m1_sqs1_spinner.getSelectedItem().toString().equals("in")))) { 
     double m1_sqs1_eng = new Double(m1_sqs1.getText().toString()); 
     }); 

    btnSave.setOnClickListener(new View.OnClickListener() { 
     public void onClick(View arg0) { 
     m1_sqs1_value = m1_sqs1_eng; 
     out.write (" <Cell ss:StyleID=\"s44\"><Data ss:Type=\"Number\">" + m1_sqs1_value + "</Data><NamedCell ss:Name=\"Print_Area\"/></Cell>\r\n"); 
     }); 
    } 
} 
+0

郵便番号。あなたはインスタンス変数について話していますか? – Strelok

+0

投稿されたコードには、エラーが明確に示されていません。テキストはインスタンス変数を "見る"ことができないout.write()呼び出しを指しますが、そこにはout.write()の実際のステートメントが投稿されているコードはありません。あなたが受け取っているエラーは何ですか?実行時またはコンパイル時ですか?例外がスローされていますか?スタックトレースとは何ですか?私はインスタンス変数を隠すローカルに定義された変数があなたの問題の一部であると思われます。 – chubbsondubs

+0

私はエラーが発生しない、私はちょうどout.writeに変数の値を取得していない。私は停止するためにブレークポイントを使います。変数の上にカーソルを置くと、値は表示されませんが、定義は表示されます。 – WmBurkert

答えて

4

:ここ

public class MyActivity extends Activity { 
    private EditText streetField; 
    private EditText nameField; 

    protected onCreate(Bundle savedBundle) { 
     streetField = findViewById(R.id.streetField); 
     nameField = findViewVById(R.id.nameField); 

     someButton.setOnClickListener(new View.OnClickListener() { 
      public void onClick(View view) { 
       Person person = new Person(); 
       person.setName(nameField.getText().toString()); 
       person.setStreet(streetField.getText().toString()); 
      } 
     }); 
    } 
} 

streetFieldとnameFieldはMyActivityクラスのインスタンス変数です。これらは、インスタンスメソッドで定義された任意のインスタンスメソッド、内部クラス、または匿名内部クラスで使用できます。これらの書籍のほとんどがこれらの本で議論されているので、入門的なJavaブックを手に入れたいと思うかもしれません。

http://java.sun.com/docs/books/effective/

2

あなたは親アクティビティのクラスレベルの変数を定義し、onClickListenersでそれらにアクセスする必要があります。

このListenerクラスが匿名の内部クラスである場合、この変数に直接アクセスできます。 これらがパブリッククラスとして実装されている場合は、作成中にこれらのリスナーにアクティビティ参照を渡すことができます。例えば

+0

クラス変数は、クラス内の任意のメソッドがアクセスできる変数です。クラス変数を宣言するときには、次の2つの基本規則があります。✦宣言をクラス本体内に配置する必要がありますが、クラスメソッド内では ではありません。 ✦宣言にstaticという文字を含める必要があります。単語 は変数型の前にあります。 – WmBurkert

+0

クラス変数(静的)を使用することは、あなたがしたいことではありません。静的変数は永久にメモリに保持されます。インスタンス変数は、インスタンスの存続期間が終了すると終了し、アクティビティがメモリ内にある間のみメモリを占有します。クラスの静的メンバーは、アプリケーション全体がシャットダウンされるまでは消えません。さらに、さまざまな初期化問題のファントムエラーが発生する可能性があります。 – chubbsondubs

+0

私は静的な定義を取り除きました。計算中に変数を取得しようとしていないので、情報がどこにあるのか、EditTextとSpinnersから結果を取得しました。それが他の問題につながる可能性があるために何をしないかを教えてくれてありがとう。 – WmBurkert

関連する問題