1

错误无法启动活动 ComponentInfo:java.lang.IllegalStateException:系统服务在 onCreate() 之前对活动不可用

我正在尝试分离代码和使用辅助类。(创建不同的 Java 文件)我所做的是创建了一个在 Manifest 中注册的 Activity Java 文件,但我没有注册以下类(Java 文件):

import android.app.Activity;
import android.location.LocationManager;
import android.net.ConnectivityManager;
....


public class DeviceMonitor extends Activity {

    boolean laag=false;
    int level=-1;
    double batterylevel=-1;


    public boolean GPSEnabled() {

    final LocationManager manager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);

    if ( !manager.isProviderEnabled( LocationManager.GPS_PROVIDER ) ) { // NO GPS ENABLED
        //ErrorMessage.append(R.string.enablegps);
        //ErrorMessage.append("\n");
        Log.d("StartPrepare","GPS DISABLED");
        return false;
                    } else {
        Log.d("StartPrepare","GPS ENABLED");
        return true;
                    }
    }

我删除了 OnCreate() 方法,这是正确的吗?我是否应该在 Manifest 中注册,如果是,如何注册?

从注册的 Activity 调用时,我收到以下错误,如下所示:

DeviceMonitor MyDevice = new DeviceMonitor();
if (MyDevice.GPSEnabled()){gpsenabled=true;}else{gpsenabled=false;fout=true;}

错误:

E/AndroidRuntime(1912):java.lang.RuntimeException:无法启动活动 ComponentInfo{package}:java.lang.IllegalStateException:系统服务在 onCreate() 之前对活动不可用

任何可以让我了解帮助类的人(我是 Java/Android 的新手)并且知道错误可能导致什么?我尝试添加 OnCreate() 方法,但没有帮助。

非常感谢!

4

2 回答 2

1

不要这样做...

DeviceMonitor MyDevice = new DeviceMonitor();

DeviceMonitor扩展Activity,你不应该创建一个Activityusing的实例new。AndroidActivity是一个特例类,不应像普通 Java 类一样对待。

如果您想启动一个,Activity您需要使用startActivity...)或其他“启动”方法之一。

如果你想要一个“帮助”类,只需创建一个不扩展任何东西的标准 Java 类。当您从 main 创建它的实例时Activity,将 传递Activity Context给它的构造函数,然后使用它来访问 Android 服务等。示例...

public class DeviceMonitor {

    Context mContext = null;

    public DeviceMonitor (Context context) {
        mContext = context;
    }
}

编辑:要创建你的助手并Context从你的主要Activity做这个...

// An Activity IS a Context so pass 'this'
DeviceMonitor MyDevice = new DeviceMonitor(this);
于 2011-12-28T22:03:10.163 回答
0

你需要声明你的

boolean GPSEnabled 

在您的类或服务中调用 onCreate() 方法之后。

于 2011-12-28T21:57:42.467 回答