作者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