作者lin790505 (舞踏linkl)
看板AndroidDev
標題[問題] 傳值給Thread用
時間Sat Mar 17 13:38:00 2012
↓用書上範例改的一個球體掉落程式
http://www.mediafire.com/?nsgncnzsc6tljnn
球體會受到startVY大小(這裡我沒給值 可以給值試試)
的影響而向上彈起至不同的高度
我打算從test傳一個值給Sample_7_1這個class
讓它去取代原本在Movable的startVY
方便我可以每次輸入不同數字就能呈現不同的結果
但是我不太清楚該如何讓Movable去認startVY這個值
朋友叫我放一個function也就是saveVY(float VY) ←在Movable那
然後再去Sample_7_1把值存入後就能用了
但雖然編釋沒問題 但正式執行後按下BUTTON後卻顯現錯誤訊息
(所以我連結的程式碼以先將t.saveVY(startVY);作註解 否則不能正常執行結果)
是我saveVY的寫法錯誤嗎 還是說有別種的寫法呢?
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 114.41.132.71
1F:推 LaPass:用Bundle把t傳過去,妳用bundle去查,應該可以找到詳細的說 03/17 19:19
2F:→ LaPass:明。 03/17 19:19
3F:→ LaPass:onCreate(Bundle savedInstanceState) <= Bundle在這裡 03/17 19:20
4F:→ lin790505:用Bundle傳t ? 怎麼傳一個Thread進surfaceview? 03/17 19:38
5F:→ lin790505:沒看到類似的語法啊 03/17 19:38
6F:推 LaPass:是傳給activity還是傳給surfaceview? 妳不是說t.saveVY() 03/17 19:43
7F:→ LaPass:錯誤嗎? 那是因為妳之前沒指定t,才會出現nullpointer 03/17 19:44
8F:推 LaPass:還是妳在DrawThread.java那邊有問題?如果是這樣..... 03/17 19:47
9F:→ LaPass:其實Thread本身也是一個物件,把直傳進去的方法,把一般把 03/17 19:47
10F:→ LaPass:值傳給物件的方法一樣。看妳要用static傳,或是直接在建構 03/17 19:48
11F:→ LaPass:子中傳進去都ok。 03/17 19:48
12F:→ LaPass:如果是複雜、需要即時性的東西,丟個callback給他也可以 03/17 19:49
13F:→ LaPass:※ 把"值"傳進去的方法,"跟"把一般... 03/17 19:50
這是test.java傳的資料
Intent intent = new Intent();
intent.setClass(test.this, Movable.class);
Bundle bundle = new Bundle();
bundle.putString("speed", et.getText().toString());
intent.putExtras(bundle);
startActivity(intent);
然後Sample_7_1.java接受
Bundle bunde = this.getIntent().getExtras();
float startVY = Float.parseFloat(bunde.getString("speed"));
但我這邊畫面要引用BallView bv; //BallView物件引用
來當這頁的view而不是用layout
bv = new BallView(this); //新建BallView物件
setContentView(bv); //設定BallView物件為螢幕
可是我希望把test.java那邊過來的startVY
拿來取代我用來描述球體性質的Movable.java上(然後BallThread會拿來計算球速)
所以我在Sample_7_1.java加了這行
t.saveVY(startVY); //t為Movable物件引用
並在Movable.java上放入以下function
public void saveVY(float VY){
this.startVY = VY;
};
結果編釋無誤 執行時我期望輸入數字後
按下Button應該會跳另一個view並呈現相應於輸入數字的球體變化
但卻出現sorry!
主要狀況大約是這樣 可能排版不是很好= =
※ 編輯: lin790505 來自: 114.41.132.71 (03/17 20:20)
14F:推 LaPass:Sample_7_1.java 少 t= new Movable(.....); 03/17 21:02
15F:→ LaPass:然後,請把錯誤訊息 NullPointerExp.... 那個拿去google 03/17 21:02
16F:→ lin790505:THE APPLICATION SAMPLE_7_1 (PROCESS WYF.WPF)HAS 03/17 23:09
17F:→ lin790505:STOPPED UNEXPECTEDLY. PLEASE TRY AGAGIN. 03/17 23:09
18F:推 LaPass:呃.... 妳會不會看logcat? 去google logcat 03/18 00:51