android中提示:Cannot make a static reference to the non-static method getSystemService(Strin) from the type 或者 Non-static method ‘getSystemService(java.lang.String)’ cannot be referenced from a static context解决方案
1.1 问题描述
今天在进行android编程的时候,提示:Non-static method ‘getSystemService(java.lang.String)’ cannot be referenced from a static context。
下面我先将我的代码展现出来(代码测试是在 < Android API 32 Platform > 中):
private void BatteryRemainingEnergy(TextView tv_cell) {
BatteryManager mBatteryManager =
// error: Non-static method 'getSystemService(java.lang.String)' cannot be referenced from a static context
(BatteryManager)Context.getSystemService(Context.BATTERY_SERVICE);
Long energy = mBatteryManager.getLongProperty(BatteryManager.BATTERY_PROPERTY_ENERGY_COUNTER);
Long energyNow = mBatteryManager.getLongProperty(BatteryManager.BATTERY_PROPERTY_CURRENT_NOW);
tv_cell.append("Remaining energy = " + energy + "nWh\n");
tv_cell.append("Now energy = " + energyNow + "nWh\n");
tv_cell.append("battery status = " + BatteryManager.EXTRA_STATUS + "\n");
}
我们可以查看Context中的getSystemService()的函数如下所示,可以发现该函数是一个abstract函数。
public abstract @Nullable Object getSystemService(@ServiceName @NonNull String name);
1.2 问题解决方案
此时我们只需要将非静态依赖项添加为参数即可,修改如下所示:
private static void BatteryRemainingEnergy(TextView tv_cell, Context c) {
BatteryManager mBatteryManager =
(BatteryManager)c.getSystemService(Context.BATTERY_SERVICE);
Long energy = mBatteryManager.getLongProperty(BatteryManager.BATTERY_PROPERTY_ENERGY_COUNTER);
Long energyNow = mBatteryManager.getLongProperty(BatteryManager.BATTERY_PROPERTY_CURRENT_NOW);
tv_cell.append("Remaining energy = " + energy + "nWh\n");
tv_cell.append("Now energy = " + energyNow + "nWh\n");
tv_cell.append("battery status = " + BatteryManager.EXTRA_STATUS + "\n");
}
// 函数中调用BatteryRemainingEnergy()函数
@SuppressLint("SetTextI18n")
@Override
public void onReceive(Context context, Intent intent) {
private TextView tv_cell = (TextView) findViewById(R.id.tv_cell);
if (Intent.ACTION_BATTERY_CHANGED.equals(intent.getAction())) {
BatteryRemainingEnergy(tv_cell, context);
}
}
因为getSystemService
是Context
类的非静态方法,因此为了访问它,需要从类上下文中获取一个对象。通常,您可以从Activty内部调用它,而Activty也是上下文的对象。为了修复此问题,您可以将上下文传递给您的方法isNetworkConnected
。
版权声明:本文为weixin_45676049原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。