0

静的クラスから非静的クラスに値を正常に渡しましたが、その値をに置くと、エラー、null値が発生しましたEditText

   public class HelloBubblesActivity extends SherlockFragmentActivity  {
   public EditText editText1;

   @Override    
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_discuss);
        editText1 = (EditText) findViewById(R.id.editText1);
           }

                public static class MyDialogFragment extends SherlockDialogFragment {
                     //i fill variable emotx is "test string"
                       public void emot(String emotx){
                        HelloBubblesActivity hb=new HelloBubblesActivity();
                        hb.smiley(emotx); //send value to smiley method..
                  }
               }

          public void smiley(String name){
                Log.d("test", name); //result value is "test string" (success)
                editText1.setText(name); //here is error
          }
  }

なぜこの問題が発生するのかわかりません。これが期待どおりに機能しない理由を誰かが理解できますか?

4

1 に答える 1

1
HelloBubblesActivity hb=new HelloBubblesActivity();
hb.smiley(emotx); //send value to smiley method..

新しいHelloBubblesActivityオブジェクトを作成しますが、呼び出さonCreateないため、editText1には何も割り当てません。割り当てられたことがないフィールドは、Javaではnullです。

(もちろん、コードが「期待される」ことを実行していないと言うのは間違っているでしょう。シナリオから期待されることを正確に実行しているのです。)

(間違いは、HelloBubblesActivityオブジェクトに値を設定すると、その値がすべてのHelloBubblesActivityオブジェクトに表示されると考える場合に最も可能性が高くなります。個々のオブジェクトはインスタンスフィールドを共有せず、あるオブジェクトに設定したものが別のオブジェクトに魔法のように表示されることはありません。あるクラスのオブジェクトを作成し、そのクラスの他のオブジェクトと何らかの異常な通信を行うことを期待します。)

(しかし、これは、アセンブラープログラミングなどの優れたバックグラウンドなしにOOPにダンプされた人が犯す一般的な間違いです。)

于 2013-01-27T18:32:52.950 に答える