将上下文从MainActivity传递到其他Class for System服务

时间:2018-01-27 11:11:08

标签: java android service system android-context

我想稍微清理一下我的Main活动类,并将一些代码转移到其他类,以使我的代码更容易阅读。 我遇到了这样的情况

MainActivity Class

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

当我通过这样的上下文时 - > isNetworkAvailable(MainActivity.this)我遇到了崩溃。并收到错误

  

在onCreate()

之前,活动无法使用系统服务

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

2 个答案:

答案 0 :(得分:1)

您需要使用:

    ConnectivityManager connectivityManager = (ConnectivityManager) 
        context.getSystemService(context.CONNECTIVITY_SERVICE);

否则该调用实际上是Static.this.getSystemService(...),因为Static实例是由您创建的而不是系统创建的,所以它不是有效的Context

但是在这种情况下,我认为Static类没有任何理由扩展AppCompatActivity所以你应该删除它。

答案 1 :(得分:0)

您收到错误是因为您已将Static类设为没有onCreate方法的活动。而不是使它成为一个简单的Java类,并通过函数参数将上下文传递给isNetworkAvailable方法。