实例化异常:在主活动中找不到空构造函数

时间:2015-06-08 13:53:15

标签: java android eclipse

我收到了java.lang.Runtime异常:当我尝试在模拟器或连接的设备上运行活动时,无法实例化活动。它给出了一个实例化异常;找不到空的构造函数。启动器活动中的例外是它有一个空的构造函数。应用程序运行正常,突然开始提供此异常。我发现了一些类似的帖子,但没有一个答案解决了这个问题。

主要活动的代码段:

    public class Login extends Activity implements OnClickListener,Runnable, OnItemSelectedListener
{
//class variables
public Login(Context context) {
        super();
    }
//Other code 
}  

我的清单文件明确将活动定义为启动器活动。

清单文件摘要

   <activity android:name=".Login" android:theme="@android:style/Theme.NoTitleBar" android:configChanges="keyboardHidden|orientation|locale" android:label="@string/app_name">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>

我无法发布整个代码,但我相信我已经发布了与此异常相关的重要部分。

我正在使用带有ADT v22.6.2的Eclipse IDE。

3 个答案:

答案 0 :(得分:1)

你得到的错误说你需要一个无参数的构造函数:

public Login() {

}

当你没有定义构造函数时,编译器会自动添加这个构造函数,但由于你有一个不同的构造函数 - public Login(Context context) - 没有生成无参数的构造函数。

您可能根本不应该使用 - Login(Context context) - 构造函数,因为应用程序开发人员不直接实例化Activity,因此不应该调用此构造函数。

答案 1 :(得分:1)

活动不应该有明确的构造函数。删除你添加的那个:

public Login(Context context) {
    super();
}

当你的类没有任何显式的构造函数时,会自动为你生成一个空的no-arg,这就是平台所期望的。

答案 2 :(得分:1)

首先,让我们总结已经给出的答案:

  • 您创建了此构造函数

    公共登录(上下文上下文){     超(); } 如果创建构造函数,则编译器不再添加空构造函数。所以你必须自己添加它。这是空构造函数的代码:

    public Login() {
    super();
    }
    
  • 但是(正如在另一个答案中已经说过的那样)你不应该为扩展Activity的类创建构造函数。这是因为Activity类型的对象的创建由Android本身处理,而不是由开发人员处理。 如果要在创建Activity时执行代码,则应覆盖其onCreate() - Method,如下所示:

    @Override
    protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState); 
    //put your code here
    }
    

要详细了解Android系统活动的生命周期,请点击此处了解更多信息:Managing the Activity Lifecycle

  • 最后一个提示如下: 您不需要将Context赋予Activity,因为类Activity派生自Context。因此,如果您在Activity中,那么您将始终拥有Context对象。因此,您可以通过关键字

    访问Context-object
    this
    

我希望这会对你有所帮助:)。