Bundle 語法應用問題

2009.12.28 07:09PM
Bundle 語法應用問題
public class Equipment extends Activity
{
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.equipment);
find_views();
setClick();
bundle = this.getIntent().getExtras();
}

//編號一號
Bundle bundle;
private int hp_max = bundle.getInt("KEY_hp_max");
private TextView view_hp;
private Button view_equipment_body;

private void find_views()
{
//編號二號view_hp = (TextView) findViewById(R.id.equipment_hp);
view_equipment_body = (Button) findViewById(R.id.equipment_body);
}
private void setClick()
{
view_equipment_body.setOnClickListener(body);
}

private Button.OnClickListener body = new Button.OnClickListener()
{
public void onClick(View v)
{
hp_max = hp_max + 50;
view_hp.setText(getText(R.string.condition_hp) + nf.format(hp_max));
}
};
}
 

各位大大好
開頭的package和import我拔掉沒PO到文章,省篇幅
 
會在我按下按鈕要跳轉到這個Activity時候就直接出現錯誤警告訊息
 
而我需要在使用者按下按鈕時,改變從上一個Activity傳送過來的資料

如果還要補充什麼,請各位大大說一下,麻煩大大們解惑。
 

 [url=http://www.oz.stu.edu.tw/s95101216/www/Textgame.rar]完整原始碼[/url]

 

14 則回應

  • 大大你好:

     目前手邊有gasolin 大大寫的書

    想問一下有無類似介紹語法功能,或例題的書籍推薦

     

     

    另外想問一下,像我這篇的這種錯誤

    就是原始碼上顯示正常無錯誤,執行起來才會出錯強制關閉

    像這種錯誤有沒有什麼名詞可以稱呼?

     

    印象中之前好像有聽人說過,但是忘記是什麼了。

    2010-01-14
  •  keyword 是 SetResult. google 一下吧, 或者找本書也可.

    2010-01-07
  •  錯是必然的....

    宣告, 你幹什麼 = bundle.getint()? 你可以 =0 或者其他數字.

    宣告的時候, bundle 你有放東西入去嗎?

    2010-01-06
    • lanhk wrote:

       錯是必然的....

      宣告, 你幹什麼 = bundle.getint()? 你可以 =0 或者其他數字.

      宣告的時候, bundle 你有放東西入去嗎?

       

       大大你好:

      我那時候秀逗了,竟然放兩次= bundle.getint()

      修正後,可以正常無誤執行了!!!!      

      感謝大大不厭其煩的教導。

       

      ------------------------------------------------------------------------------

      Bundle是單項Activity傳到另一個Activity

      不知道有無會回傳的語法

      1 Activity傳送資料到 2 Activity 

      2 Activity將資料變更後,結束 2 Activity時自動將資料回傳 1 Activity

       

       

      2010-01-07
  • 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

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

    2010-01-05
    • 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

      2010-01-06
  •  朋友你還不太弄清楚程式的幾個基本次序

    宣告: Bundle bundle;

    放入: bundle = this.getIntent().getExtras();

    提取: lv = bundle.getInt("KEY_lv");

    你未放入, 如何提取?

    你 "//編號一號" 的地方只用來宣告的.

    何解你硬要用它執行?

    為何不把 hp_max = bundle.getInt("KEY_hp_max");

    放入 OnCreate 內的 bundle = this.getIntent().getExtras(); 下面?

    建議你從頭到尾跟 gasolin 大大學一次基本的.

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

    2010-01-04
    • lanhk wrote:

       朋友你還不太弄清楚程式的幾個基本次序

      宣告: Bundle bundle;

      放入: bundle = this.getIntent().getExtras();

      提取: lv = bundle.getInt("KEY_lv");

      你未放入, 如何提取?

      你 "//編號一號" 的地方只用來宣告的.

      何解你硬要用它執行?

      為何不把 hp_max = bundle.getInt("KEY_hp_max");

      放入 OnCreate 內的 bundle = this.getIntent().getExtras(); 下面?

      建議你從頭到尾跟 gasolin 大大學一次基本的.

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

       

       大大你好:

      我若將hp_max = bundle.getInt("KEY_hp_max");放到

      OnCreate 內的 bundle = this.getIntent().getExtras(); 下面的話

      我按鈕內hp_max = hp_max + 50;中的hp_max會顯示無法解析

       

      若按照大大說法,應該是如下擺放吧

      public void onCreate(Bundle savedInstanceState)
      {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.equipment);
      find_views();
      setClick();
      bundle = this.getIntent().getExtras();
      int hp_max = bundle.getInt("KEY_hp_max");
      }

      Bundle bundle;

      可是這樣順序不就變成

      放入>提取>宣告      了嗎

       

      gasolin大大的電子書,我有從頭到尾實作過一次

      因此我原始碼中許多的寫法,滿多都是從gasolin大大的例題演變而來

      他書中bundle的應用部分,是在↓

      private void showResults()
      {
      處理運算過後的身高體重的bmi
      }

       

      而bundle這部分在我原始碼內的這個地方↓

      public void find_condition()
      {
      }

      有實際應用,確實可以無誤正確執行並取得數值

       

       

      唯獨要將數值傳入按鈕內一直無法成功↓

      private Button.OnClickListener body = new Button.OnClickListener()
      {
      public void onClick(View v)
      {
      }
      };

      2010-01-05
  • 你的

    setClick();
    find_views();

    對掉了.

     

    你還未 find_views() 告訴程式 view_equipment_body 是什麼,

    你又如何 setOnClickListener 給她呢?

    2010-01-04
    • lanhk wrote:

      你的

      setClick();
      find_views();

      對掉了.

       

      你還未 find_views() 告訴程式 view_equipment_body 是什麼,

      你又如何 setOnClickListener 給她呢?

       

       大大你好:

      在我程式碼裡面,順序是
      find_views();

      setClick();

       

      應該是我當初編輯文章時,不小時弄到了,造成困擾 抱歉!!

      我確認後,順序是沒問題的,可是依然會出現上面說的錯誤訊息

       

      --------------

      順便在首篇修改上面的錯誤

      首篇底下加上完整原始碼

      2010-01-04
  •  int lv = bundle.getInt("KEY_lv");

    當然要在

    Bundle bundle = this.getIntent().getExtras();

    的同一個 procedure 內才可用啦.

    如果你想在其他地方都能用 bundle, 那你應在編號一號加上: Bundle bundle;

    OnCreate 內加 bundle = this.getIntent().getExtras();

    2010-01-04
    • lanhk wrote:

       int lv = bundle.getInt("KEY_lv");

      當然要在

      Bundle bundle = this.getIntent().getExtras();

      的同一個 procedure 內才可用啦.

      如果你想在其他地方都能用 bundle, 那你應在編號一號加上: Bundle bundle;

      OnCreate 內加 bundle = this.getIntent().getExtras();

       

       

      大大你好:

      當我在OnCreate 內加 bundle = this.getIntent().getExtras();

      並在編號一加上

      Bundle bundle;

      int lv = bundle.getInt("KEY_lv");

      在我原始碼那邊,的確不會出現錯誤訊息,也都能抓到變數了

       

      可是如果我在編號一加上

      Bundle bundle;

      int lv = bundle.getInt("KEY_lv");

      會出現我第一篇說的情形,在我按下按鈕要跳轉到這個Activity時候就直接出現錯誤警告訊息

      2010-01-04
  • 編號一號 那裡跟本沒有 procedure, 那如何執行?

    拿 bundle 的相關句語, 一般我都收在 OnCreate 內.

    一開始就拿下數據, 以後其他 procedure 愛甚樣弄就愛甚樣弄.

     

    2009-12-30
    • lanhk wrote:

      編號一號 那裡跟本沒有 procedure, 那如何執行?

      拿 bundle 的相關句語, 一般我都收在 OnCreate 內.

      一開始就拿下數據, 以後其他 procedure 愛甚樣弄就愛甚樣弄.

       

       

       

      大大你好! 如果將↓ Bundle bundle = this.getIntent().getExtras(); 放在你說的地方,當我在編號二要抓取bundle內數值的時候,例如↓ int lv = bundle.getInt("KEY_lv"); 他會出現錯誤說bundl無法解析
      2010-01-02