ming2348381對lanhk的留言說:lanhk wro...

2010.01.06 05:04PM
lanhk

ming 兄你的問題就是弄不清楚各個位置的用法. 想來你以前是從未寫過程式吧?

其實我自己在寫 android 之也是從未寫過 java. 所以也是個半吊子.

 

//編號一號 的地方, 雖然你是放在 OnCreate(){} 之下. 但其實是它"上一層", 全個 class

的宣告地區, 你把它放到底最後一個 } 之前也是一樣. 所以你在這裡宣告的, 全個 class

都通用. 叫你把 Bundle bundle; 放在那裡. 這樣, 你所有 method 也可以用它.

到這裡你應明白, 次序依然是: 宣告> 放入>提取.

 

現在你又把 int hp_max = bundle.getInt("KEY_hp_max"); 放回 OnCreate() 內.

這樣, hp_max 就變成 OnCreate 內的函數. 對 body 而言,  它是一個不明物體.

 

把 int hp_max 放回 //編號一號, 把 OnCreate 內的改為

hp_max = bundle.getInt("KEY_hp_max");  那就應該行了.

 

現在你再看一次  gasolin 大大的

http://code.google.com/p/androidbmi/wiki/BmiRefactor

你就明白這段為什麼要這樣抽出來.

lanhk wrote:

ming 兄你的問題就是弄不清楚各個位置的用法. 想來你以前是從未寫過程式吧?

其實我自己在寫 android 之也是從未寫過 java. 所以也是個半吊子.

 

//編號一號 的地方, 雖然你是放在 OnCreate(){} 之下. 但其實是它"上一層", 全個 class

的宣告地區, 你把它放到底最後一個 } 之前也是一樣. 所以你在這裡宣告的, 全個 class

都通用. 叫你把 Bundle bundle; 放在那裡. 這樣, 你所有 method 也可以用它.

到這裡你應明白, 次序依然是: 宣告> 放入>提取.

 

現在你又把 int hp_max = bundle.getInt("KEY_hp_max"); 放回 OnCreate() 內.

這樣, hp_max 就變成 OnCreate 內的函數. 對 body 而言,  它是一個不明物體.

 

把 int hp_max 放回 //編號一號, 把 OnCreate 內的改為

hp_max = bundle.getInt("KEY_hp_max");  那就應該行了.

 

現在你再看一次  gasolin 大大的

http://code.google.com/p/androidbmi/wiki/BmiRefactor

你就明白這段為什麼要這樣抽出來.

 

 大大你好:

是的,以前就只有上課時,聽聽老師教的,做些簡單迴圈之類的練習

沒有實際上寫一個"完整"的程式出來過。

 

我將gasolin 電子書的"重構程式"重新看過一次後

理解如下,如有錯誤請糾正

public void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.main);           
      //Listen for button clicks
      Button button = (Button) findViewById(R.id.submit);        //這邊是宣告+放入寫成一行
      button.setOnClickListener(calcBMI);
  }
 
改寫為
 
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    findViews();          //函式
    setListeners();         //函式
}
 
private Button calcbutton;             //宣告
 
 
private void findViews()
{
    calcbutton = (Button) findViewById(R.id.submit);       //放入
}
 
 
----------------------------------------換我自已的程式--------------------------
public void onCreate(Bundle savedInstanceState) 
{
        super.onCreate(savedInstanceState);
        setContentView(R.layout.equipment);   
        find_views();  
        find_condition();
        setClick();
        bundle = this.getIntent().getExtras();                      //放入
        hp_max = bundle.getInt("KEY_hp_max");               //放入
        lv = bundle.getInt("KEY_lv");                                  //放入
    }
 
Bundle bundle;                //宣告
int hp_max = bundle.getInt("KEY_hp_max");             //宣告
int lv =  bundle.getInt("KEY_lv");                               //宣告
 
-------------------假設我理解的沒有錯誤的話,是否可以修正為下列寫法-----------------
public void onCreate(Bundle savedInstanceState) 
{
        super.onCreate(savedInstanceState);
        setContentView(R.layout.equipment);   
        find_views();  
        find_condition();
        setClick();
come_bundle();                                        //函式
    }
 
Bundle bundle;                                                        //宣告
int hp_max = bundle.getInt("KEY_hp_max");             //宣告
int lv =  bundle.getInt("KEY_lv");                               //宣告
 
 
private void come_bundle()
    {
        bundle = this.getIntent().getExtras();                      //放入
        hp_max = bundle.getInt("KEY_hp_max");               //放入
        lv = bundle.getInt("KEY_lv");                                  //放入
    }
 
------------------------實際運作----------------------------------
改為上列寫法後,我原始碼那裡已經沒有錯誤訊息了

但是實際執行後卻仍然出現第一篇Activity跳轉失敗的警告訊息。

我指的訊息如下圖

http://www.oz.stu.edu.tw/s95101216/www/error.JPG

最新回應