【问题标题】:Caused by: java.lang.IllegalStateException: System services not available to Activities before onCreate()原因:java.lang.IllegalStateException:系统服务在 onCreate() 之前对活动不可用
【发布时间】:2015-06-12 16:42:47
【问题描述】:

我的 MainActivity 中有“check_wifi_available”方法,该方法检测以“SDF-”字符开头的特定 SSID。该方法在那里运行良好,但是当我超出范围时出现问题,尽管我超出范围,但我仍然得到最后的扫描结果,所以我决定从“ConnectionBroadcast”类的调用中调用它,但经过很短的时间应用崩溃。

错误:

<?php
04-08 00:13:25.412: E/AndroidRun04-08 00:17:48.229: E/AndroidRuntime(849): 	at android.app.ActivityThread.handleReceiver(ActivityThread.java:2567)
04-08 00:17:48.229: E/AndroidRuntime(849): 	at android.app.ActivityThread.access$1800(ActivityThread.java:161)
04-08 00:17:48.229: E/AndroidRuntime(849): 	at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1341)
04-08 00:17:48.229: E/AndroidRuntime(849): 	at android.os.Handler.dispatchMessage(Handler.java:102)
04-08 00:17:48.229: E/AndroidRuntime(849): 	at android.os.Looper.loop(Looper.java:157)
04-08 00:17:48.229: E/AndroidRuntime(849): 	at android.app.ActivityThread.main(ActivityThread.java:5356)
04-08 00:17:48.229: E/AndroidRuntime(849): 	at java.lang.reflect.Method.invokeNative(Native Method)
04-08 00:17:48.229: E/AndroidRuntime(849): 	at java.lang.reflect.Method.invoke(Method.java:515)
04-08 00:17:48.229: E/AndroidRuntime(849): 	at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1265)
04-08 00:17:48.229: E/AndroidRuntime(849): 	at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1081)
04-08 00:17:48.229: E/AndroidRuntime(849): 	at dalvik.system.NativeStart.main(Native Method)
04-08 00:17:48.229: E/AndroidRuntime(849): Caused by: java.lang.IllegalStateException: System services not available to Activities before onCreate()
04-08 00:17:48.229: E/AndroidRuntime(849): 	at android.app.Activity.getSystemService(Activity.java:4713)
04-08 00:17:48.229: E/AndroidRuntime(849): 	at com.bustracker.MainActivity.check_wifi_available(MainActivity.java:82)
04-08 00:17:48.229: E/AndroidRuntime(849): 	at com.bustracker.ConnectionBroadcast.onReceive(ConnectionBroadcast.java:44)
04-08 00:17:48.229: E/AndroidRuntime(849): 	at android.app.ActivityThread.handleReceiver(ActivityThread.java:2552)
04-08 00:17:48.229: E/AndroidRuntime(849): 	... 10 more


?>

package com.bustracker;


import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.widget.Toast;

public class ConnectionBroadcast extends BroadcastReceiver {
	 MainActivity wifi;

	@Override
	public void onReceive(Context context, Intent intent) {
		if (intent.getAction().equals(
				android.net.ConnectivityManager.CONNECTIVITY_ACTION)) {

			ConnectivityManager connectivityManager = (ConnectivityManager) context
					.getSystemService(Context.CONNECTIVITY_SERVICE);

			NetworkInfo netInfo = connectivityManager.getActiveNetworkInfo();

			boolean isConnected = netInfo != null
					&& netInfo.isConnectedOrConnecting();
			if (isConnected) {
				Toast.makeText(context,
						"The device is connected to the internet ",
						Toast.LENGTH_SHORT).show();
			} else {
				Toast.makeText(context,
						"Please connect the device to the internet.",
						Toast.LENGTH_SHORT).show();
			}

		} else if (intent.getAction().equals(
				android.net.wifi.WifiManager.SCAN_RESULTS_AVAILABLE_ACTION)) {
			wifi = new MainActivity();
			wifi.check_wifi_available();
			
		}
	}

}

        <receiver android:name=".ConnectionBroadcast" >
            <intent-filter>
                <action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
            </intent-filter>
            <intent-filter>
                <action android:name="android.net.wifi.SCAN_RESULTS" />
            </intent-filter>
        </receiver>

【问题讨论】:

    标签: android broadcastreceiver


    【解决方案1】:

    广播接收器中的这段代码不正确。你不能实例化一个活动对象。

    wifi = new MainActivity();
    wifi.check_wifi_available();
    

    您需要将 check_wifi_available() 中的任何代码放入 onReceive 中。

    【讨论】:

    • 问题在于这个方法的结果“wifi.check_wifi_available”会在xml文件中显示为“textWifi.setText(a.toString());”并且 textWifi 变量在 MainActivity 类中声明。我该如何管理它?
    猜你喜欢
    • 2014-06-19
    • 2011-08-19
    • 2015-10-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-05
    • 2013-08-29
    • 1970-01-01
    相关资源
    最近更新 更多