无法在 android 中获取全局变量
Can't take global variable in android
当用户点击按钮时,年龄为50。之后,当使用nfc发送数据时,年龄的值为0.0。帮助!我该如何解决?
public class MainActivity extends Activity{
String mone;
InputStream is =null;
double age;
double app=50.00,water=60.88,ban=35.55;
boolean app_b=true, water_b=true, ban_b=true;
private ViewFlipper viewFlipper;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
viewFlipper = (ViewFlipper) findViewById(R.id.viewflipper);
if (NfcAdapter.ACTION_NDEF_DISCOVERED.equals(getIntent().getAction())) {
Parcelable[] rawMsgs = getIntent().getParcelableArrayExtra(NfcAdapter.EXTRA_NDEF_MESSAGES);
NdefMessage msg = (NdefMessage) rawMsgs[0];
String te = new String(msg.getRecords()[0].getPayload());
mone=te;
Log.e("value 2 ","val"+age); //age is 0.0
}
}
public void onNewIntent(Intent intent) {
setIntent(intent);
}
public void onClick(View v) {
if (v.getId() == R.id.apple)
app_b=false;
else if (v.getId() == R.id.watermelon)
water_b=false;
else if (v.getId() == R.id.banana)
ban_b=false;
}
public void aniStart(){
// Next screen comes in from right.
viewFlipper.setInAnimation(this, R.anim.slide_in_from_right);
// Current screen goes out from left.
viewFlipper.setOutAnimation(this, R.anim.slide_out_to_left);
// Display previous screen.
viewFlipper.showPrevious();
}
public void submit(View v){
if(v.getId() == R.id.button && (!app_b || !water_b || !ban_b)){
if (!app_b)
age=app;
else if (!water_b)
age=water;
else if (!ban_b)
age=ban;
aniStart();
Log.e("Value","age:"+age); //age=50;
}
else {
Toast.makeText(getApplicationContext(),"please select your fruit",Toast.LENGTH_LONG).show();
}
}
}
为什么年龄是 0.0?
更新:
此应用实际上是通过 NFC 从另一个 phone 接收数据。在点击 phone 之前,我点击按钮并获得值 50。之后,我从另一个 phone 接收数据并将字符串值保存在 "te".
uhm onCreate
首先被调用,age 没有赋值。
目前您的变量在单击按钮时正在更新,但如果您想在检查意图时为年龄分配一个值,那么您可以在启动此 activity 的意图中传递一个双精度值,使用 putExtra(String key , double 值) 的意图。
年龄显示为 0.0,因为:
- 这是 java(
double age; // age = 0.0
) 中未分配的双精度值的默认值
onCreate()
方法在您的 activity 'starts up'(在您可以单击按钮之前)后立即运行,因此日志语句将始终打印您将 age 变量初始化为的任何值(在本例中为 0.0)。
将此代码放入 onClick():
if (NfcAdapter.ACTION_NDEF_DISCOVERED.equals(getIntent().getAction())) {
Log.e("nfc","insidenfc"+age); //age is 0.0
}
当用户点击按钮时,年龄为50。之后,当使用nfc发送数据时,年龄的值为0.0。帮助!我该如何解决?
public class MainActivity extends Activity{
String mone;
InputStream is =null;
double age;
double app=50.00,water=60.88,ban=35.55;
boolean app_b=true, water_b=true, ban_b=true;
private ViewFlipper viewFlipper;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
viewFlipper = (ViewFlipper) findViewById(R.id.viewflipper);
if (NfcAdapter.ACTION_NDEF_DISCOVERED.equals(getIntent().getAction())) {
Parcelable[] rawMsgs = getIntent().getParcelableArrayExtra(NfcAdapter.EXTRA_NDEF_MESSAGES);
NdefMessage msg = (NdefMessage) rawMsgs[0];
String te = new String(msg.getRecords()[0].getPayload());
mone=te;
Log.e("value 2 ","val"+age); //age is 0.0
}
}
public void onNewIntent(Intent intent) {
setIntent(intent);
}
public void onClick(View v) {
if (v.getId() == R.id.apple)
app_b=false;
else if (v.getId() == R.id.watermelon)
water_b=false;
else if (v.getId() == R.id.banana)
ban_b=false;
}
public void aniStart(){
// Next screen comes in from right.
viewFlipper.setInAnimation(this, R.anim.slide_in_from_right);
// Current screen goes out from left.
viewFlipper.setOutAnimation(this, R.anim.slide_out_to_left);
// Display previous screen.
viewFlipper.showPrevious();
}
public void submit(View v){
if(v.getId() == R.id.button && (!app_b || !water_b || !ban_b)){
if (!app_b)
age=app;
else if (!water_b)
age=water;
else if (!ban_b)
age=ban;
aniStart();
Log.e("Value","age:"+age); //age=50;
}
else {
Toast.makeText(getApplicationContext(),"please select your fruit",Toast.LENGTH_LONG).show();
}
}
}
为什么年龄是 0.0?
更新:
此应用实际上是通过 NFC 从另一个 phone 接收数据。在点击 phone 之前,我点击按钮并获得值 50。之后,我从另一个 phone 接收数据并将字符串值保存在 "te".
uhm onCreate
首先被调用,age 没有赋值。
目前您的变量在单击按钮时正在更新,但如果您想在检查意图时为年龄分配一个值,那么您可以在启动此 activity 的意图中传递一个双精度值,使用 putExtra(String key , double 值) 的意图。
年龄显示为 0.0,因为:
- 这是 java(
double age; // age = 0.0
) 中未分配的双精度值的默认值
onCreate()
方法在您的 activity 'starts up'(在您可以单击按钮之前)后立即运行,因此日志语句将始终打印您将 age 变量初始化为的任何值(在本例中为 0.0)。
将此代码放入 onClick():
if (NfcAdapter.ACTION_NDEF_DISCOVERED.equals(getIntent().getAction())) {
Log.e("nfc","insidenfc"+age); //age is 0.0
}