- 行号没有可执行代码

时间:2017-09-21 13:55:12

标签: android

好的,这让我疯了!请考虑以下代码:

public class PhoneConfigService extends Activity 
{
    public int CheckAPIVersion()
    {
        int version = Build.VERSION.SDK_INT;
        return version;
    }

    //Basically I am trying to check if data saver mode if enabled for devices with API level greater than 
    @TargetApi(24)
    public boolean CheckIfAllowDataSaverModeEnabledForApp() { //line number 70
        ConnectivityManager connMgr = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);

        if (CheckAPIVersion() < 24) {
            return false;
        } else {
            switch (connMgr.getRestrictBackgroundStatus()) {
                case RESTRICT_BACKGROUND_STATUS_ENABLED:
                    // Background data usage and push notifications are enabled which will block or limit the usage of this app
                    return true;

                case RESTRICT_BACKGROUND_STATUS_WHITELISTED:
                case RESTRICT_BACKGROUND_STATUS_DISABLED:
                    // Data Saver is disabled or the app is whitelisted
            }
        }
        return false;
    }
}

//My main class
public class TestChanges extends Activity
{
    @Override
        protected void onCreate(Bundle savedInstanceState) 
        {
           super.onCreate(savedInstanceState);
           setContentView(R.layout.test_changes);

           String dataSaverMode = Boolean.toString(inst.CheckIfAllowDataSaverModeEnabledForApp());
           TextView tvSummary = (TextView) findViewById(R.id.summary);

           if(dataSaverMode == "true")
           {
              //Do some logic
           }
}

但每当我休息一下并进入CheckIfAllowDataSaverModeEnabledForApp()功能时,我就会继续:

  

PhoneConfigService.java:70

中没有可执行代码

即使我已将以下内容添加到应用的build.gradle文件中:

debug { debuggable true minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android.txt') signingConfig signingConfigs.release }

仍然有所作为。我检查了构建变体,我在调试模式下运行应用程序。

更新:请注意,它会在之前抛出错误,甚至会进入CheckIfAllowDataSaverModeEnabledForApp()块。它甚至无法到达方法内的第一个支柱“{”。

更新II:根据@MC Emperor的评论,我删除了或者更确切地说将断点移到了方法中的某个位置,我现在得到了一个不同的例外:

  

java.lang.IllegalStateException:系统服务不可用   onCreate()之前的活动

经过一些阅读后,我发现可能是我onCreate()课程中的TestChanges方法导致的,我正在实例化PhoneConfigService课程。

PhoneConfigService inst = new PhoneConfigService();。我怎么能绕过这个?显然我不能使用new来实例化该类。

我禁用了Instant Run,重建(和清理)了项目和相同的结果。

1 个答案:

答案 0 :(得分:0)

我在这里提到@LabeebPanampullan的回答:enter image description here

  1. 我在我的extends Activity类中添加了一个构造函数(如下所示)并删除了Context mContext; public PhoneConfigService(Context mContext) { this.mContext = mContext; }这是我的问题的根本原因。我知道因为@Raghunandan的答案在这里发布:How can I use getSystemService in a non-activity class (LocationManager)?
  2. CheckIfAllowDataSaverModeEnabledForApp()

    1. 在我的Context方法中,我将ConnectivityManager connMgr = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);作为参数传递,并将此行从:ConnectivityManager connMgr = (ConnectivityManager) mContext.getSystemService(Context.CONNECTIVITY_SERVICE);更改为:TestChanges

    2. 在我的PhoneConfigService类中,我在实例化PhoneConfigService inst = new PhoneConfigService(TestChanges.this);类时传递了上下文,如下所示:{{1}}并且所有内容都按预期工作。感谢大家的宝贵意见。