Android提示:Non-static method ‘getSystemService(java.lang.String)‘ cannot be referenced from a static

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);
        }
}

因为getSystemServiceContext类的非静态方法,因此为了访问它,需要从类上下文中获取一个对象。通常,您可以从Activty内部调用它,而Activty也是上下文的对象。为了修复此问题,您可以将上下文传递给您的方法isNetworkConnected


版权声明:本文为weixin_45676049原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。