在A.java里写了如下一段代码检测网络,在onCreate能正常获得"Mobile"值;然后在B.java onCreate里写了A gnws=new A();gnws.getnetworkstate();出现了如
“System services not available to Activities before onCreate()” 引用后就不能使用了?求解,新手!!!!
public String getnetworkstate() {
String returnint;
try {
ConnectivityManager connectivityManager = (ConnectivityManager) this
.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo net = connectivityManager.getActiveNetworkInfo();
if (net == null) {
returnint = "not";
} else {
returnint = net.getTypeName();
} } catch (Exception e) {
// TODO: handle exception
Log.v("程序出错:", e.getMessage());
returnint="not";
}
return returnint;

}

解决方案 »

  1.   

    A gnws=new A();gnws.getnetworkstate();这个A是extends Activity的吗?如果是extends的Activity, 你就不能new 老创建, Activity是系统通过ActivityManagerService创建管理的。 new之后,创建了对象,但没有创建这个Activity,要知道Activity的对象和在Android中真正表示的东西,不是一样的。 对象创建完成后,需要系统对其进行一系列的init和管理。在这个创建的过程中,会回调Acitivity中的onCreate方法,这个方法调用之后,才能说明Activity是创建完成了。你这里,根本就不能使用new A()要通过startActivity的方式,实例化这个A对象。如果想要调用这个gnws.getnetworkstate();, 在B中实现一个一样的方法就是了。
      

  2.   

    楼上说的在理,a也是一个类,为什么不能实例化,实例化是没有错的。照结果来看,实例化a是没有什么问题的,如果被调用的a的方法实现中并没有一些android特有的东西,我想应该是b的调用应该是可行的。但是关于service接口的获取,好像必须要在调用OnCreate之后,楼主可以试一下调用a.OnCreate之后再调用getnetworkstate,单纯是实验性质。正确的实现照楼上说的就可以吧,要不就把service作为这个函数的参数,函数作为一个静态函数,每个actvity调用时直接将获得service传递。不知道这样行不行?
      

  3.   

    原因同5L
    解决方法:
    将A代码改为:
    public String getnetworkstate(Context context) {
            String returnint;
            try {
                ConnectivityManager connectivityManager = (ConnectivityManager) context
                        .getSystemService(Context.CONNECTIVITY_SERVICE);
                NetworkInfo net = connectivityManager.getActiveNetworkInfo();
                if (net == null) {
                    returnint = "not";
                } else {
                    returnint = net.getTypeName();
                }        } catch (Exception e) {
                // TODO: handle exception
                Log.v("程序出错:", e.getMessage());
                returnint="not";
            }
            return returnint;
                
            }
    然后在B.java onCreate里写了A gnws=new A();gnws.getnetworkstate(XXXXActivity.this);
      

  4.   

     其实原因我在唠叨一下吧:    一个Activity只有当系统(ActivityMangerService)启动它时,才会给它分配相应的Context实例属性,因此我们可以通过调用Activity.this.getSystemService()去获得系统服务 。
       但问题在于你自己new 了一个Activity实例,例如 Activity A = new ActivityXXX(),显然,对应它而言,它的Context属性来说是无效的,即 ConnectivityManager connectivityManager = (ConnectivityManager) this
                        .getSystemService(Context.CONNECTIVITY_SERVICE);这段代码是有问题的。
     
          修改原因同LS  。  预知原因,请看我的这篇博客:Android中Context详解 ---- 你所不知道的Context
                http://blog.csdn.net/qinjuning/article/details/7310620