Java 将上下文从MainActivity传递到系统服务的其他类

Java 将上下文从MainActivity传递到系统服务的其他类,java,android,service,system,android-context,Java,Android,Service,System,Android Context,我想稍微清理一下我的主活动类,并将一些代码转移到另一个类,使我的代码更易于阅读。 我遇到了这样的情况 主要活动类 public class MainActivity extends AppCompatActivity { protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); this.supportRequestWindowFeat

我想稍微清理一下我的主活动类,并将一些代码转移到另一个类,使我的代码更易于阅读。 我遇到了这样的情况

主要活动类

public class MainActivity extends AppCompatActivity { 
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        this.supportRequestWindowFeature(Window.FEATURE_NO_TITLE);
        setContentView(R.layout.activity_main);
        getData("2B1A4D3C");
     }
    public void getData(String Hex) {
        Static staticClass = new Static();
           if (staticClass.isNetworkAvailable(MainActivity.this) == true) {
                  staticClass.setData(response);
           }
    }
}
二等舱

class Static extends AppCompatActivity {
    public boolean isNetworkAvailable(Context context) {
        ConnectivityManager connectivityManager = (ConnectivityManager) 
            getSystemService(context.CONNECTIVITY_SERVICE);
    NetworkInfo activeNetworkInfo = 
            connectivityManager.getActiveNetworkInfo();
    if ( activeNetworkInfo != null ) {
        return true;
    } else {
        return false;
    }
}
当我像这样通过contex->isNetworkAvailable(MainActivity.this)时,我遇到了一个崩溃。并得到一个错误

onCreate()之前的活动无法使用系统服务


传递上下文的正确方法是什么?

您将得到一个错误,因为您将静态类设置为没有onCreate方法的活动。相反,将其设置为一个简单的Java类,并通过函数参数将上下文传递给isNetworkAvailable方法。

您需要使用:

    ConnectivityManager connectivityManager = (ConnectivityManager) 
        context.getSystemService(context.CONNECTIVITY_SERVICE);
否则,该调用实际上将是静态的。this.getSystemService(…)并且由于该实例是由您而不是系统创建的,因此它不是有效的
上下文


但是在这种情况下,
Static
类没有任何理由扩展
AppCompatActivity
,因此您可能应该删除它。

onCreate必须在静态类中调用,然后才能调用connectivity manager。不要扩展AppCompatActivity,而是使用上下文实例。谢谢,这解释了我所需要的一切。@ekavet我很高兴能帮上忙。祝你好运