2011-11-23 49 views
2

我在编程时启动手机时运行的服务,但需要Internet连接和连接才能发送SMS运营商。 我写了一个函数来ConnectionManager中出现的其他职位,但我总是得到相同的答案:NullPointerException,当我做到以下几点:NetworkInfo上的NullPointerException

我定义cmConnectionManager

NetworkInfo NetInfo = cm.getNetworkInfo(); 

难道不是因为这个的?

我该如何解决?

很抱歉,如果我没有把所有的代码...

在由ACTION_BOOT_COMPLETED激活的服务的OnStart()方法,我有以下...

@ Override 
public void OnStart (Intent intent, int start) { 

    Context aplCtx = getApplicationContext(); 


    IsConnected boolean = false; 
    while (! IsConnected) { 
     try { 
      IsConnected = IsOnline (aplCtx); 

     } Catch (Exception e) { 
      Log.d (e.toString()); 
     } 
    } 

    ..... 
} 

private boolean IsOnline (Context ctx) { 

    boolean result = false; 

    try { 
     ConnectivityManager cm = (ConnectivityManager) ctx.getSystemService  (Context.CONNECTIVITY_SERVICE); 
     cm.getActiveNetworkInfo NetworkInfo ni =(); 

     if (ni! = null) { 
      if (ni.getState() == NetworkInfo.State.CONNECTED) { 
       result = true; 
      } 
     } 
     return result; 
} 

由于这是一个后台功能,启动智能手机后,操作系统强制杀死进程,然后才能连接到Internet。我该如何解决这个问题?, 如何获得操作系统不会终止进程并通过Internet连接执行以下操作?

+1

发布原始代码。 – Mudassir

回答

1

没有你的代码中,我们也不能说什么什么走错了,

但是,要我用这个,如果你不犯错,然后它也可以网络信息,

public static boolean netConnect(Context ctx){ 
    ConnectivityManager cm ; 
    NetworkInfo info = null; 

    try { 
     cm = (ConnectivityManager) ctx.getSystemService(Context.CONNECTIVITY_SERVICE); 
     info = cm.getActiveNetworkInfo();   

    } catch (Exception e) { 
     Log.e("connectivity", e.toString()); 
    } 

    if(info != null){ 
      return info.isConnected(); 
    }else{ 
     return false; 
    } 
} 
+0

这里有个问题。 info将被设置为一个NetworkInfo对象,但是您还没有实际测试过它是否连接到网络或连接。仅仅这个对象不是空的是不足以说明的。 在退出方法之前,应使用info.isAvailable()和/或info.isConnected()。 –

+0

@Andrew Weir - 感谢您的评论。我更新了我的答案。现在它是正确的。 – user370305

+0

我使用了这段代码,但是我有互联网,而且我弄错了。 :/ –