android - Helper 类 - 错误无法启动 Activity ComponentInfo :

标签 android class oncreate runtimeexception illegalstateexception

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

我正在尝试分离代码和使用辅助类。 (创建不同的 Java 文件) 我所做的是创建一个在 list 中注册的 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: Unable to start activity ComponentInfo{package}: java.lang.IllegalStateException: System services not available to Activities before onCreate()

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

非常感谢!

最佳答案

不要这样做...

DeviceMonitor MyDevice = new DeviceMonitor();

DeviceMonitor 扩展了 Activity,您永远不应使用 new 创建 Activity 的实例。 Android Activity 是一个特例类,不应将其视为普通 Java 类。

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

如果您想要一个“助手”类,只需创建一个不扩展任何内容的标准 Java 类即可。当您从主 Activity 创建它的实例时,在其构造函数中将 Activity Context 传递给它,然后使用它来访问 Android 服务等. 示例...

public class DeviceMonitor {

    Context mContext = null;

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

编辑: 要创建您的助手并从您的主要 Activity 传递一个 Context,请执行此操作...

// An Activity IS a Context so pass 'this'
DeviceMonitor MyDevice = new DeviceMonitor(this);

关于android - Helper 类 - 错误无法启动 Activity ComponentInfo :,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8661729/

相关文章:

Android 如何以编程方式访问 string.xml 文件中的字符串和 color.xml 中的颜色

Android服务onCreate被多次调用,没有调用onDestroy

java - Android - Activity 构造函数与 onCreate

android - : notification. 标志和 notification.defaults 之间有什么区别?

android - 媒体播放器android中的SetDataSource

android - Release模式下应用程序的日志消息

java - Android Activity 在按下后退按钮之前没有响应

c# - 如何将我的 SQL 连接放在一个单独的类中? C#

异步调用后 JavaScript ES6 调用 "super"

c++通过 "using"在另一个未封闭的命名空间中定义类