帮助程序类 - 错误无法启动活动ComponentInfo:

时间:2011-12-28 21:55:05

标签: android class oncreate runtimeexception illegalstateexception

错误无法启动活动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()方法,这是正确的吗? 我是否应该在清单中注册,如果是,如何?

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

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

错误:

  

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

任何能给我一些关于帮助程序类的人(我在Java / Android中都是新的)并且有任何线索错误可能导致什么?我尝试添加OnCreate()方法,但没有帮助。

非常感谢!

2 个答案:

答案 0 :(得分:1)

不要这样做......

DeviceMonitor MyDevice = new DeviceMonitor();

DeviceMonitor扩展Activity,您绝不应使用Activity创建new的实例。 Android Activity是一个特殊情况类,不应该被视为普通的Java类。

如果你想开始使用Activity,你需要使用startActivity...)或其他“开始”方法之一。

如果你想要一个'helper'类,只需创建一个不扩展任何东西的标准Java类。当您从主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);

答案 1 :(得分:0)

您需要申报

boolean GPSEnabled 

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