我正在尝试在函数中设置一个值(全局)并在android中的“On create()”中的函数外部访问它 我已经尝试将全局变量设置为静态,我甚至尝试在“编辑文本”中编写它并在“on create()”中解析它。但它保持初始化为0.0(变量是双重类型) 当我试图访问“on create()”时,
哦,我无法返回该值,因为该函数太嵌套,因此所有层次结构都太复杂了。 :(
任何人都可以帮助我;
public class TryActivity extends Activity
{
double BAT;\\ global value
public void onCreate(Bundle savedInstanceState)
{
disp(); // calling the function disp to set the value to BAT
String To_string=Double.toString(BAT);
System.out.println("Current Battery level ==="+To_string); \\ prints 0.0 the wrong value
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
}
public void disp(){
this.registerReceiver(this.batteryInfoReceiver, new IntentFilter(Intent.ACTION_BATTERY_CHANGED));
}
private BroadcastReceiver batteryInfoReceiver = new BroadcastReceiver(){
public void onReceive(Context context, Intent intent){
double level= intent.getIntExtra(BatteryManager.EXTRA_LEVEL,0);
BAT=level;
Textview1 = (EditText) findViewById(R.id.Textview1);
Textview1.setText(Double.toString(BAT)); // sets the correct value
System.out.println("bbbattererrerey 1 "+Double.toString(BAT)); //prints the correct value
}
};
}
答案 0 :(得分:1)
只需在类中全局初始化变量为 public static 。您可以从任何地方访问它。
答案 1 :(得分:1)
将您的变量定义为公共 static
:
public class TryActivity extends Activity
{
public static double BAT; //global value.
public void onCreate(Bundle savedInstanceState) {
...
...
...
您的BAT
值为0.0
,因为当您的活动开始时执行方法onCreate()
以及仅注册意图获取电池的方法disp()
水平。
如果您想在活动开始时获得电池电量,您可以通过一项功能来获取电池电量而无需接收更新。
public float getMyBatteryLevel() {
Intent batteryIntent = this.getApplicationContext().registerReceiver(null,
new IntentFilter(Intent.ACTION_BATTERY_CHANGED));
return batteryIntent.getIntExtra("level", -1);
}
@Override
protected void onCreate(Bundle savedInstanceState) {
//* Add this method.
getMyBatteryLevel()
disp(); // calling the function disp to set the value to BAT
String To_string = Double.toString(BAT);
System.out.println("Current Battery level ==="+To_string); //prints the right battery level.
答案 2 :(得分:0)
问题是你不了解并发的概念。不会立即调用BroadcastReceiver的onReceive()
。因此,您只需在disp()
中设置BroadcastReceiver,而不是直接触摸BAT
。 <{1}}只会在调用BAT
时填入正确的值。
答案 3 :(得分:0)
如果您查看日志,System.out.println()
中写的onCreate
将在您的BroadcastReceiver的System.out.println()
中写的onReceive
之前被调用,即使它已被写入在disp()
方法之后。
原因:
在disp()
方法中,您只是注册BroadcastRecever并不意味着您的BroadcastReceiver被调用。在您的电池电量发生变化后,它会被调用。
解决方案:
如果你想用you BAT
变量做一些事情,在Activity类中定义一个函数,并在其中写入整个逻辑,如
doThings(double batteryLevele){
//write whatever you want to do with BAT
}
并从BroadcastReceiver的onReceive
方法调用此函数。