2014-02-05 87 views
0

我有第二個類調用Main類的方法,此方法將設置一個TextView與一個數字,但該應用程序崩潰,因爲nullPointerExceptionfindViewById()。我相信問題是當findViewById被另一個類調用時,它會查找調用類的setContentView()中的視圖。爲特定佈局調用findViewById()? NullPointerException on findViewById()

那麼如何指定哪個佈局findViewById()正在查看? 爲什麼會出現'nullPointerException'?

************************************************* 
        MAIN CLASS 
************************************************* 

protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    if (!NUMBER.exists()) { 
     new File("/data/data/com.app.clicker/files").mkdir(); 
     writeInt(NUMBER, total = 0); 
     writeInt(CLICK, perClick = 1); 
     writeInt(CASH, $ = 500); 
     setView(R.id.numberView, "", readInt(NUMBER)); 
     setView(R.id.perClickView, "Per Click ", readInt(CLICK)); 
     setView(R.id.cash, "Cash ", readInt(CASH)); 
    } else { 
     setView(R.id.perClickView, "Per Click ", readInt(CLICK)); 
     setView(R.id.cash, "Cash ", readInt(CASH)); 
     setView(R.id.numberView, "", readInt(NUMBER)); 
    } 
} 

    public void setTotal(int total) { 
    writeInt(NUMBER, total); 
    setView(R.id.numberView, "", this.total); 
    } 
    public void setView(int view, String writeBefore, int num) { 
    TextView textView = (TextView) findViewById(view); >> NullPointerException 
    textView.setText(writeBefore + Integer.toString(num)); 
    } 

************************************************ 
        Second Class 
************************************************  

protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_dev); 
    Main main = new Main(); 
    total = main.getTotal(); 
    perClick = main.getPerClick(); 
    $ = main.get$(); 
    devListView(); 
} 

final EditText editTotal = new EditText(Dev.this); 
      final EditText editPerClick = new EditText(Dev.this); 
      final EditText edit$ = new EditText(Dev.this); 
      editTotal.setInputType(InputType.TYPE_CLASS_NUMBER); 
      editPerClick.setInputType(InputType.TYPE_CLASS_NUMBER); 
      edit$.setInputType(InputType.TYPE_CLASS_NUMBER); 
      switch (position) { 
      case 0: 
       Builder devTotal = new AlertDialog.Builder(Dev.this); 
       devTotal.setTitle("Set Total").setView(editTotal).setNeutralButton("Set", new DialogInterface.OnClickListener() { 
        @Override 
        public void onClick(DialogInterface dialog, int which) { 
         finish(); 
         main.setTotal(Integer.parseInt(editTotal.getText().toString())); ************ Call to Main to SetTotal 
        } 
       }); 
       devTotal.create().show(); 
       break; 
+0

這是什麼?它是片段嗎?活動? –

+0

同時添加活動xml ..你可以直接傳遞Textview obj,你可以直接使用該obj設置而不是findViewById() – Manmohan

+1

這段代碼有很多錯誤,但最重要的是,你嘗試使用的方法是隻是明顯錯誤。您需要回顧Android的基礎知識。一個Activity可以通過多種方式更新另一個。首先閱讀'Interace'和'startActivityForResult()'..你不應該把活動看作POJO。 – Simon

回答

0

從代碼:

Main main = new Main(); 

它看起來像您可以通過調用new Main()創建活動(R.layout.activity_main),你不應該那樣做:你開始活動,startActivity,如果你想發送一些值給他們使用Intent演員。

+0

佈局有點令人困惑,編輯應該更清楚。 主要實例是使用getTotal()方法等。 我在Main中使用startActivity()來啓動第二,它只是沒有顯示。 – ralphpig

+0

你爲什麼用新創建主要活動?這不允許你訪問它的小部件。 – marcinj

+0

我還能如何從第二個訪問Main? – ralphpig