如何解决android studio 错误 E/AndroidRuntime: FATAL EXCEPTION: main
This a error
E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.loginappaplication,PID: 20994
java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.example.loginappaplication/com.example.loginappaplication.MainActivity}: java.lang.InstantiationException: java.lang.class<com.example.loginappaplication.MainActivity> has no zero argument constructor
at android.app.ActivityThread.performlaunchActivity(ActivityThread.java:3449)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3703)
at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:83)
at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135)
at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2216)
at android.os.Handler.dispatchMessage(Handler.java:107)
at android.os.Looper.loop(Looper.java:237)
at android.app.ActivityThread.main(ActivityThread.java:7948)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1075)
Caused by: java.lang.InstantiationException: java.lang.class<com.example.loginappaplication.MainActivity> has no zero argument constructor
at java.lang.class.newInstance(Native Method)
at android.app.AppComponentFactory.instantiateActivity(AppComponentFactory.java:95)
at androidx.core.app.CoreComponentFactory.instantiateActivity(CoreComponentFactory.java:45)
at android.app.Instrumentation.newActivity(Instrumentation.java:1251)
at android.app.ActivityThread.performlaunchActivity(ActivityThread.java:3437)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3703)
at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:83)
at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135)
at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2216)
at android.os.Handler.dispatchMessage(Handler.java:107)
at android.os.Looper.loop(Looper.java:237)
at android.app.ActivityThread.main(ActivityThread.java:7948)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1075)
公共类 MainActivity 扩展 AppCompatActivity {
private EditText eName;
private EditText ePassword;
private Button eLogin;
private TextView eAttemptsInfo;
private String Username = "Azahracaca";
private String Password = "Caca12345";
boolean isvalid = false;
private int counter = 3;
public MainActivity(Button eLogin) {
this.eLogin = eLogin;
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
eName = findViewById(R.id.IdName);
ePassword = findViewById(R.id.etPassword);
eAttemptsInfo = findViewById(R.id.tvAttemptsInfo);
eLogin.setonClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String inputName = eName.getText().toString();
String inputPassword = ePassword.getText().toString();
if (inputName.isEmpty() || inputPassword.isEmpty())
{
Toast.makeText(MainActivity.this,"Pastikan Semuanya Benar !",Toast.LENGTH_SHORT).show();
}else{
isvalid = valited(inputName,inputPassword);
if(!isvalid){
counter--;
Toast.makeText(MainActivity.this,"Salah Memasukkan Data !",Toast.LENGTH_SHORT).show();
eAttemptsInfo.setText("Jumlah Login Tersisa : 3 Kali" + counter);
if(counter == 0){
eLogin.setEnabled(false);
}
}else {
Toast.makeText(MainActivity.this,"Login Sukses !",Toast.LENGTH_SHORT).show(); //ke menu selanjutnya
Intent intent = new Intent(MainActivity.this,HomePage.class);
startActivity(intent);
}
}
}
});
}
private boolean valited(String name,String password){
if(name.equals(Username) && password.equals(Password)){
return true;
}
return false;
}
}
解决方法
public MainActivity(Button eLogin) {
this.eLogin = eLogin;
}
将此构造函数设为空,并使用 findViewById 初始化 eLogin
按钮,就像您为 eName
所做的那样。
您应该在 onCreate()
中/之后初始化所有视图。无法在类构造函数中初始化视图。
为什么要传递 Param 构造函数 Activity?
编辑:
public class MainActivity extends AppcompatActivity
和
Button button = findViewById(R.id....)
,
结构应该是这样的
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。