package com.example.photodiary; import androidx.appcompat.app.AlertDialog; import androidx.appcompat.app.AppCompatActivity; import android.content.Intent; import android.os.Bundle; import android.view.View; import android.widget.Button; import android.widget.EditText; public class MainActivity extends AppCompatActivity { protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //设置密码 EditText password = findViewById(R.id.edit_view_1); String correctPassword = "20230523";//正确的密码 Button button = findViewById(R.id.button_1); Intent intent = new Intent(this,Diary.class); //点击按钮 button.setOnClickListener(new View.OnClickListener(){ public void onClick(View v){ String inputPassword = password.getText().toString(); if(inputPassword.equals(correctPassword)){ startActivity(intent);//密码正确,跳转页面 }else { AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this); builder.setMessage("密码错误!");//密码错误,弹出窗口提示 builder.create().show(); } } }); } }密码正确时点击按钮后闪退
时间: 2023-12-06 17:40:30 浏览: 121
根据你提供的代码,可能是因为在点击按钮后跳转页面的时候,出现了一些异常导致应用程序崩溃了。建议你查看一下 Logcat 中的错误信息,以便更好地定位问题所在。你可以尝试在 Android Studio 中打开 Logcat,然后运行应用程序并点击按钮,查看是否有报错信息提示。如果有的话,请将错误信息提供给我,以便我更好地帮助你解决问题。
相关问题
package com.example.photodiary; import android.os.Bundle; import androidx.appcompat.app.AppCompatActivity; public class Diary extends AppCompatActivity { private val REQUEST_CODE_CAMERA_PERMISSION = 1001 private lateinit var imageCapture: ImageCapture protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_diary); } }
这是一个基本的 Diary 类,继承了 AppCompatActivity 类,它是 Android 框架提供的一个 Activity 基类,可以兼容不同的 Android 版本。在 onCreate() 方法中,设置了 Diary 的布局文件为 activity_diary.xml。但是,这段代码中有一些错误:
1. 声明 REQUEST_CODE_CAMERA_PERMISSION 时需要加上类型,比如 int 或者 final int。
2. 在 Kotlin 中,变量声明方式不同于 Java,应该使用 var 或 val 关键字来声明变量,而不是使用 Java 中的 private 或 public 等修饰符。
3. 在 Kotlin 中,方法的声明方式也不同于 Java,应该省略掉返回值类型,并且方法体使用花括号 {} 包裹起来。因此,onCreate() 方法应该改为以下形式:
```
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_diary)
}
```
4. 在 Kotlin 中,声明属性时需要初始化,否则会编译错误。因此,需要将 imageCapture 属性初始化,比如:
```
private lateinit var imageCapture: ImageCapture = ImageCapture.Builder().build()
```
综上所述,正确的代码应该是这样的:
```
package com.example.photodiary
import android.os.Bundle
import androidx.appcompat.app.AppCompatActivity
import androidx.camera.core.ImageCapture
class Diary : AppCompatActivity() {
private val REQUEST_CODE_CAMERA_PERMISSION: Int = 1001
private lateinit var imageCapture: ImageCapture
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_diary)
imageCapture = ImageCapture.Builder().build()
}
}
```
package com.example.photodiary; import androidx.appcompat.app.AlertDialog; import androidx.appcompat.app.AppCompatActivity; import android.content.Intent; import android.os.Bundle; import android.view.View; import android.widget.Button; import android.widget.EditText; public class MainActivity extends AppCompatActivity { //设置密码 EditText password = findViewById(R.id.edit_view_1); String inputPassword = password.getText().toString(); String correctPassword = "20230523";//正确的密码 protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } Button button = findViewById(R.id.button_1); Intent intent = new Intent(this,Diary.class); button.setOnClickListener(new View.OnClickListener(){ public void onClick(View v){ if(inputPassword.equals(correctPassword)){ //密码正确,跳转页面 startActivity(intent); }else { //密码错误,弹出窗口提示 AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this); builder.setMessage("密码错误!"); } } } }
在您的代码中可能会发现一些问题,我将对其进行解释和建议:
1. 将设置密码的代码放入 onCreate 方法中
在您的代码中,您在类定义之外声明了一个 EditText 和两个字符串变量,这些变量在 onCreate 方法之前被操作。 但是,在 onCreate 方法之前,视图尚未加载,因此您无法使用 findViewById 方法来获得 EditText 的引用。 因此,您需要将以下代码移动到 onCreate 方法中:
```
//设置密码
EditText password = findViewById(R.id.edit_view_1);
String inputPassword = password.getText().toString();
String correctPassword = "20230523";//正确的密码
```
2. 在 onClickListener 中创建 AlertDialog.Builder
在您的代码中,您在创建 AlertDialog.Builder 对象时未调用 .create() 方法。 此外,您需要在 onClickListener 中创建 AlertDialog.Builder 对象,以便单击按钮时显示警报对话框。 因此,您需要将以下代码移动到 onClickListener 中:
```
AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);
builder.setMessage("密码错误!");
builder.create().show();
```
3. 将 startActivity 方法放入 if 语句中
在您的代码中,您在 if 语句之外调用 startActivity 方法。 但是,如果密码不正确,则不应该启动 Diary 活动。 因此,您需要将以下代码移动到 if 语句中:
```
//密码正确,跳转页面
startActivity(intent);
```
根据上述建议,您的代码应该类似于以下内容:
```
public class MainActivity extends AppCompatActivity {
//设置密码
private EditText password;
private String inputPassword;
private String correctPassword = "20230523";//正确的密码
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
password = findViewById(R.id.edit_view_1);
Button button = findViewById(R.id.button_1);
Intent intent = new Intent(this, Diary.class);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
inputPassword = password.getText().toString();
if (inputPassword.equals(correctPassword)) {
//密码正确,跳转页面
startActivity(intent);
} else {
//密码错误,弹出窗口提示
AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);
builder.setMessage("密码错误!");
builder.create().show();
}
}
});
}
}
```
阅读全文