2017-09-21 1 views
0

Okay, das macht mich verrückt! Bitte beachten Sie die folgenden Code:Es gibt keinen ausführbaren Code bei der Zeilennummer

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

Aber immer, wenn ich eine Pause setzen und treten in die CheckIfAllowDataSaverModeEnabledForApp() Funktion, erhalte ich die eine:

Es gibt keinen ausführbaren Code auf PhoneConfigService.java:70

Selbst nachdem ich die folgende meiner App build.gradle Datei hinzugefügt haben:

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

Noch tut nicht machen einen Unterschied. Ich habe die Build-Varianten überprüft und starte die App im Debug-Modus.

UPDATE: Bitte beachten Sie, dass es den Fehler vor wirft es tritt sogar den CheckIfAllowDataSaverModeEnabledForApp() Block. Es kann nicht einmal zu der ersten Klammer '{' innerhalb der Methode gelangen.

Update II: Per @MC Kaisers Kommentar, ich entfernt oder verschoben eher den Haltepunkt zu einem Punkt weiter unten in der Methode, und ich bin eine andere Ausnahme bekommen jetzt:

java.lang. Illegal: Systemdienste nicht zur Verfügung Aktivitäten vor onCreate()

nach einiger Lektüre sehe ich, dass es in meiner onCreate() Methode in meiner TestChanges Klasse verursacht werden könnte, wo ich bin instantiatin g die PhoneConfigService klasse viz.

PhoneConfigService inst = new PhoneConfigService();. Wie kann ich mich darum kümmern? Anscheinend kann ich new nicht verwenden, um die Klasse zu instanziieren.

Ich deaktiviert Instant Run, neu erstellt (und bereinigt) das Projekt und das gleiche Ergebnis.

+0

ist Zeile 70 in Ihrem Fall Aussage, zufällig? Warum haben Sie nicht einfach eine 'connMgr.getRestrictBackgroundStatus() == RESTRICT_BACKGROUND_STATUS_ENABLED' Anweisung zurück? – corn3lius

+0

Es löst den Fehler aus, wenn es versucht, die Funktion einzugeben. CheckIfAllowDataSaverModeEnabledForApp() –

+0

Ich weiß es nicht, aber denken Sie daran: 1. 'dataSaverMode ==" true "' - ** nie ** Strings wie diese vergleichen. Verwenden Sie immer die 'equals()' Methode. 2. Sie sollten sich an die Java Naming Conventions halten: Methodennamen beginnen immer mit einem Kleinbuchstaben. –

Antwort

0

bezog ich mich auf @LabeebPanampullan ‚s Antwort hier gepostet: How can I use getSystemService in a non-activity class (LocationManager)?

  1. ich einen Konstruktor hinzugefügt (siehe unten), um meine PhoneConfigService Klasse und entfernt die extends Activity Dies war die Ursache für mein Problem. Ich wusste, dass wegen @Raghunandan ‚s Antwort hier gepostet: IllegalStateException "System services not available to Activities before onCreate()"

Context mContext; public PhoneConfigService(Context mContext) { this.mContext = mContext; }

  1. In meiner CheckIfAllowDataSaverModeEnabledForApp() Methode, die ich bestehen Context als Parameter und verändern diese Zeile aus : ConnectivityManager connMgr = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE); zu: ConnectivityManager connMgr = (ConnectivityManager) mContext.getSystemService(Context.CONNECTIVITY_SERVICE);

  2. in meiner TestChanges Klasse, ich im Kontext übergeben, wenn die PhoneConfigService Klasse instanziieren wie folgt aussehen: PhoneConfigService inst = new PhoneConfigService(TestChanges.this); und alles ist w orking wie erwartet jetzt.Danke an alle für ihren wertvollen Beitrag.

Verwandte Themen