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我很高兴能帮上忙。祝你好运