练习startActivityForResult方法的用法
代码中出现了大量的system.out.println(“一堆字符”),为了更好的看代码执行到那个地方出现问题。可以在安卓控制台加System.out过滤。建议过滤之前,先看看是否闪退。如果闪退,一般控制台大量刷屏。检查一下oncreate什么。可能是代码结构混乱了
1.LoginActivity.java
package com.example.myapplication;
import androidx.annotation.Nullable;
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;
import android.widget.Toast;
public class LoginActivity extends AppCompatActivity {
private Button login;
private Button reset;
private EditText InputUN, InputPWD;
@Override
protected void onCreate(Bundle savedInstanceState) {
System.out.print("yyyyyyyyyyyyyyyyyyyyyyyyyyyyyy");
super.onCreate(savedInstanceState);
System.out.print("ssssssssssssssssss");
setContentView(R.layout.activity_login);
System.out.print("LLLLLLLLLLLLLLLLLLLLLL");
InputUN = findViewById(R.id.InputUN);
InputPWD = findViewById(R.id.InputPWD);
login = findViewById(R.id.login);
login.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent data = new Intent(LoginActivity.this, LoginOKActivity.class);
startActivityForResult(data, 1);
data.putExtra("name", InputUN.getText().toString());
data.putExtra("password", InputPWD.getText().toString());
startActivityForResult(data,1);
}
});
//重置
reset = findViewById(R.id.reset);
reset.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
InputUN.setText("");
InputPWD.setText("");
}
});
}
@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == 1 && resultCode == 2) {
Toast.makeText(LoginActivity.this, "登录失败123!", Toast.LENGTH_LONG).show();
}
}
}
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:paddingTop="40dp">
<TextView
android:id="@+id/userName"
android:layout_width="120dp"
android:layout_height="40dp"
android:inputType="text"
android:paddingLeft="10dp"
android:text="用户名:"
android:textSize="30dp"></TextView>
<EditText
android:id="@+id/InputUN"
android:text=""
android:inputType="text"
android:layout_width="260dp"
android:layout_height="40dp"
>
</EditText>
</LinearLayout>
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:paddingTop="40dp">
<TextView
android:id="@+id/userPWD"
android:layout_width="120dp"
android:layout_height="40dp"
android:text="密 码:"
android:textSize="30dp"
android:paddingLeft="10dp"
></TextView>
<EditText
android:id="@+id/InputPWD"
android:text=""
android:inputType="textPassword"
android:layout_width="260dp"
android:layout_height="40dp"></EditText>
</LinearLayout>
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:paddingTop="50dp"
android:layout_gravity="center">
<Button
android:id="@+id/login"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="登录"
android:textSize="30dp"
android:textColor="#8BC34A"></Button>
<Button
android:id="@+id/reset"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="重置"
android:textSize="30dp"
android:textColor="#F44336"
android:layout_marginLeft="70dp"></Button>
</LinearLayout>
</LinearLayout>
LoginOk.java
package com.example.myapplication;
import androidx.appcompat.app.AppCompatActivity;
import android.content.Intent;
import android.os.Bundle;
import android.widget.TextView;
import android.widget.Toast;
public class LoginOKActivity extends AppCompatActivity {
public static TextView showUserName;
public static TextView showUserPWD;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_login_ok);
showUserName=findViewById(R.id.showUserName);
showUserPWD=findViewById(R.id.showUserPWD);
Intent data = getIntent(); //用于激活它的意图对象:这里的intent获得的是上个Activity传递的intent
String name=data.getExtras().getString("name");
String password=data.getExtras().getString("password");
if(name.equals("张三")&&password.equals("123")){
showUserName.setText(data.getStringExtra("name"));
showUserPWD.setText(data.getStringExtra("password"));
}
else {
Intent wrong=new Intent();
setResult(2,wrong);
Intent back = new Intent(LoginOKActivity.this, LoginActivity.class);
startActivity(back);
Toast.makeText(LoginOKActivity.this, "登录失败!请检查", Toast.LENGTH_LONG).show();
}
}
}
LoginOk.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".LoginOKActivity"
android:orientation="vertical">
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:paddingTop="30dp">
<TextView
android:id="@+id/shUserName"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="您输入的用户名是:"
android:textSize="30dp"
android:maxLines="1"></TextView>
<TextView
android:id="@+id/showUserName"
android:layout_width="120dp"
android:layout_height="wrap_content"
android:text=""
android:textSize="30dp"
android:maxLines="1"></TextView>
</LinearLayout>
<LinearLayout
android:paddingTop="30dp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal">
</LinearLayout>
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal">
<TextView
android:id="@+id/shUserPWD"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:maxLines="1"
android:text="您输入的密码是:"
android:textSize="30dp"></TextView>
<TextView
android:id="@+id/showUserPWD"
android:layout_width="150dp"
android:layout_height="wrap_content"
android:maxLines="1"
android:text=""
android:textSize="30dp"></TextView>
</LinearLayout>
</LinearLayout>
在login中,设置requestCode,传值到LoginOK。在LoginOk中判断用户名和密码是否是张三和123.是则显示张三和123的用户名和密码。不是的话,返回login界面,并toast提示错误。
在 loginok中,设置resultcode
其实算是杂糅了两种方法。login中的下面这个方法。应该是loginok执行finsh()之后的。如果login是MainActivity。
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == 1 && resultCode == 2) {
Toast.makeText(LoginActivity.this, "登录失败123!", Toast.LENGTH_LONG).show();
}
}