繁体   English   中英

无法在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从另一部电话接收数据的。 在点击电话之前,我单击按钮并获得值50。此后,我从另一部电话接收数据并将字符串值保留在“ te”中。

uhm onCreate首先被调用,并且age没有分配值。

当前,单击按钮时您的变量正在更新,但是如果要在检查意图时为年龄分配一个值,则可以在意图中使用putExtra(String key,double value)在该意图中传递一个double值来启动此活动。

年龄显示为0.0,因为:

  1. 这是给java( double age; // age = 0.0 )中未分配double的默认值double age; // age = 0.0
  2. onCreate()方法会在您的活动“启动”后立即运行(在您可以单击按钮之前),因此log语句将始终显示初始化age变量的值(在本例中为0.0)。

将此代码放在onClick()中:

if (NfcAdapter.ACTION_NDEF_DISCOVERED.equals(getIntent().getAction())) {
    Log.e("nfc","insidenfc"+age);  //age is 0.0
 }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM