首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Android网络连接

Android网络连接
EN

Stack Overflow用户
提问于 2012-05-20 06:02:03
回答 2查看 292关注 0票数 0

有没有人能解释一下为什么我收到这个错误:

代码语言:javascript
复制
java.lang.RuntimeException: Unable to start activity
ComponentInfo{com.project/com.project.Deals}: java.lang.IllegalStateException: System services not available to Activities before onCreate() 

当我使用下面的两个类时,我已经这样做了很长时间了。我很感谢你的帮助

代码语言:javascript
复制
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;
    }
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-05-20 06:30:40

问题出在您的NetworkConnection类中,您从未调用过onCreate,而是尝试这样做:

代码语言:javascript
复制
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;
}

在你的其他类中这样调用它:

代码语言:javascript
复制
nc.isNetworkConnAvail(this);

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

票数 1
EN

Stack Overflow用户

发布于 2012-05-20 06:25:08

将此添加到您的清单中:

代码语言:javascript
复制
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

然后去掉这个:

代码语言:javascript
复制
extends Activity

class NetworkConnection

更新

更好的办法是将您的代码更改为:

代码语言:javascript
复制
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;
}

}

`

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10669165

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档