2011-11-23 139 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

我使用了這段代碼,但是我有互聯網,而且我弄錯了。 :/ –

相關問題