2012-05-19 67 views
0

可能有人请解释为什么我得到的错误:Android的网络连接

java.lang.RuntimeException: Unable to start activity 
ComponentInfo{com.project/com.project.Deals}: java.lang.IllegalStateException: System services not available to Activities before onCreate() 

当我使用下面的两个班,现在已经做了好久了。我欣赏的帮助

public class Deals extends Activity { 
/** Called when the activity is first created. */ 
@Override 
public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     TextView textview = new TextView(this); 
     textview.setText("This is the Artists tab"); 
     setContentView(textview); 

     NetworkConnection nc = new NetworkConnection(); 
     boolean networkAvail = nc.isNetworkConnAvail(); 
     if (networkAvail == true){ 
     } 

    } 
}; 

public class NetworkConnection extends Activity { 
/** Called when the activity is first created. */ 

public boolean isNetworkConnAvail() { 

     ConnectivityManager connMgr = (ConnectivityManager) 
      getSystemService(Context.CONNECTIVITY_SERVICE); 
     NetworkInfo networkInfo = connMgr.getActiveNetworkInfo(); 
     if (networkInfo != null) 
      return networkInfo.isConnected(); 

     return false; 
    } 
} 

回答

1

的问题是在你的NetworkConnection类,你永远不会调用的onCreate代替试试这个:

public boolean isNetworkConnAvail(Context context) { 

    ConnectivityManager connMgr = (ConnectivityManager) 
     context.getSystemService(Context.CONNECTIVITY_SERVICE); 
    NetworkInfo networkInfo = connMgr.getActiveNetworkInfo(); 
    if (networkInfo != null) 
     return networkInfo.isConnected(); 

    return false; 
} 

,并调用它像这样来自其他班级:

nc.isNetworkConnAvail(this); 

或者在NetworkConnection的构造函数中调用超类的onCreate方法。如果您只是为了能够使用getSystemService而扩展Activity,那么您可能不会扩展Activity,只需通过构造函数或方法本身传递上下文,因为这会让您访问这些方法: )

+0

感谢非常新的android,我欣赏帮助,投票给你#1 :) – James

+0

@James You非常欢迎!请务必阅读关于清单文件中权限的说明。在设备上访问不同的资源需要在清单文件中设置适当的权限。 – rastating

+0

不要担心在YouTube上观看'thenewboston'和他在Android上的200个视频后, – James

1

添加到您的清单:

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> 

,并删除此:

extends Activity 

class NetworkConnection

更新

更好的主意是你的代码更改为:

public class Deals extends Activity { 
/** Called when the activity is first created. */ 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 

boolean networkAvail = isNetworkConnAvail(); 
if (networkAvail == true){ 
    //do something 
} 

} 

public boolean isNetworkConnAvail() { 

ConnectivityManager connMgr = (ConnectivityManager) 
    getSystemService(Context.CONNECTIVITY_SERVICE); 
NetworkInfo networkInfo = connMgr.getActiveNetworkInfo(); 
if (networkInfo != null) 
    return networkInfo.isConnected(); 

return false; 
} 

} 

`

+0

感谢您的帮助我欣赏它,我得到它的工作感谢上面的帖子,但+1虽然:) – James