본문 바로가기
Android

[Android] Intent를 사용해 데이터 전달

by jane.dev 2021. 10. 30.
반응형

2021.10.28 - [Android] - [Android] Activity와 Intent

 

[Android] Activity와 Intent

Intent 메시징 객체로 다른 구성 요소로부터 작업을 요청하는데에 사용 인텐트와 구성 요소 간의 통신 방식은 크게 3가지, 서비스 시작 브로드캐스트 전달 액티비티 시작 이 있는데, 다뤄볼 방식

wheneveryouwantsz.tistory.com

 

로그인이 실행되는 과정과 비슷하게 입력받은 문자열이 특정 문자열에 해당하면 성공창으로, 해당하지 않으면 실패창으로 이동

 

위처럼 각 activity를 정의하고 구현할 수 있도록 파일 생성

 

activity_main.xml

로그인창

사용자에게 문자열을 입력받고 데이터를 전송하도록 하기위한 EditText와 Button 생성

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:tools="http://schemas.android.com/tools"
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:gravity="center"
    android:orientation="vertical">

    <!-- id를 입력받음 -->
    <EditText
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:hint="User Id"
        android:id="@+id/userId" />
    <!-- pw를 입력받음 -->
    <EditText
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:hint="User Password"
        android:id="@+id/userPw" />
    <!-- 제출 버튼 -->
    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/submitBtn"
        android:text="LOGIN" />
</LinearLayout>

 

MainActivity.java

public class MainActivity extends AppCompatActivity {

    EditText userId, userPw;
    Button submitBtn;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        userId = (EditText)findViewById(R.id.userId);
        userPw = (EditText)findViewById(R.id.userPw);
        submitBtn = (Button)findViewById(R.id.submitBtn);


        // pw용 문자열
        String str = "abcdefg";
        // id용 List
        List<String> strs = new ArrayList<>();
        strs.add(str);
        strs.add("qwerqwer");
        strs.add("asdfasdf");
        strs.add("zxcvzxvc");

        submitBtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                // EditText에 입력받은 값을 가져와서 변수에 저장
                String id = userId.getText().toString();
                String pw = userPw.getText().toString();
                Intent intent;
                // if 구문으로 각 activity에 서로 다른 데이터를 전송
                if(strs.contains(id) && pw.equals(str)){
                    intent = new Intent(getApplicationContext(), SuccessActivity.class);
                    // startActivity()가 시작되기 전에 intent.putExtra("호출명", 데이터);로 데이터 전송
                    intent.putExtra("result", "로그인에 성공하셨습니다.\n" + id + "님 환영합니다.");
                }else{
                    intent = new Intent(getApplicationContext(), FailActivity.class);
                    intent.putExtra("result", "로그인에 실패했습니다.");

                }
                startActivity(intent);
            }
        });
    }
}

List와 문자열을 생성해서 아이디가 List 내부의 값과 일치하면서 비밀번호가 문자열과 일치하는 경우에는 성공창으로 이동

 

activity_success.xml

성공창

전달된 데이터가 입력될 TextView와 누르면 로그인창으로 돌아갈 로그아웃 Button 생성

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:tools="http://schemas.android.com/tools"
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_height="match_parent"
    android:layout_width="match_parent"
    android:gravity="center"
    android:orientation="vertical">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/tv"/>
    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/logout"
        android:text="로그아웃" />

</LinearLayout>

 

SuccessActivity.java

Activity를 생성하고 Code > Override Methods...를 눌러 onCreate() 생성

public class SuccessActivity extends AppCompatActivity {

    TextView tv;
    Button logout;

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_success);

        tv = (TextView)findViewById(R.id.tv);
        logout = (Button)findViewById(R.id.logout);

        // 전달된 Intent를 받기위해 getIntent()로 가져온 intent를 변수에 저장하고
        Intent intent = getIntent();
        // putExtra()로 전달된 내부의 데이터를 get자료형Extra("호출명")로 빼냄
        String result = intent.getStringExtra("result");
        // 데이터를 활용
        tv.setText(result);

        logout.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                // 해당 Activity를 종료
                finish();
            }
        });
    }
}

 

 

activity_fail.xml

실패창

전달된 데이터가 입력될 TextView와 누르면 로그인창으로 돌아갈 로그인 다시하기 Button 생성

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:tools="http://schemas.android.com/tools"
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_height="match_parent"
    android:layout_width="match_parent"
    android:gravity="center"
    android:orientation="vertical">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/tv"/>
    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/backtoLogin"
        android:text="로그인 다시하기" />

</LinearLayout>

 

FailActivity.java

public class FailActivity extends AppCompatActivity {

    TextView tv;
    Button backtoLogin;

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_fail);

        tv = (TextView)findViewById(R.id.tv);
        backtoLogin = (Button)findViewById(R.id.backtoLogin);

        Intent intent = getIntent();
        String getResult = intent.getStringExtra("result");
        Log.d("result: ", getResult + "");
        tv.setText(getResult);

        backtoLogin.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                finish();
            }
        });
    }
}