我收到了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。
答案 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-objectthis
我希望这会对你有所帮助:)。