일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- MySQL
- Python
- 데이터베이스
- javascript
- 자바
- jsp
- 프로그래머스
- 파이썬
- jdbc
- 유튜브
- n^2 배열 자르기
- 자바스크립트
- 셀레니움
- 이진 변환 반복하기
- java
- 메모장
- 입출력
- 파일 저장
- 크롤링
- 형태소 분석기
- 개발
- 코딩
- 프로그래밍
- 모바일
- android
- js
- 세션
- 함수형 인터페이스
- Programmers
- 개발자
- Today
- Total
개인용 복습공간
[Android] Intent를 이용한 데이터 전달 (데이터 전달 + 파일 저장 예제) 본문
다른 액티비티로 데이터를 전달하는 과정 습득
액티비티에서 실행한 또 다른 액티비티로부터 결과를
되돌려 받아 처리하는 과정 습득
ConstraintLayout에서 Guideline 연습
파일 저장 코드 연습
코드 파악을 통한 액티비티 생명주기에 대한 기초 이해
Intent로 데이터 전달
Intent(인텐트) 란?
애플리 케이션 내에서의 메시지 전달, 애플리케이션 간의 메세지 전달 메커니즘 제공하고 액션을 다른 애플리케이션이 처리하도록 시스템 전역에 방송이 가능하게 한다.
첫 번째 액티비티에서 두 번째 액티비티로 데이터 전달을 하는 예제를 해보려 한다.
Inetnt로 액티비티에 데이터 전달 예제
레이아웃은 두개를 준비한다.
첫 번째 레이아웃에서 작성한 내용을 두 번째 레이아웃 TextView에 전달하려 한다.
첫 번째 액티비티 코드이다.
MainActivity.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
|
package com.example.myapplication;
import androidx.appcompat.app.AppCompatActivity;
import androidx.appcompat.app.AppCompatCallback;
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 implements View.OnClickListener {
EditText input;
Button btn01, btn02;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
input = (EditText)findViewById(R.id.main_edit_input);
btn01 = (Button)findViewById(R.id.main_btn_move);
btn02 = (Button)findViewById(R.id.main_btn_close);
btn01.setOnClickListener(this);
btn02.setOnClickListener(this);
}
@Override
public void onClick(View v) {
if(v.getId() == R.id.main_btn_move){
//데이터 첨부를 하고 액티비티 실행
String temp = input.getText().toString();
Intent intent01 = new Intent(this, Activity2.class);
intent01.putExtra("key01",temp);
startActivity(intent01);
}
if(v.getId()==R.id.main_btn_close){
//종료
finish();
}
}
}
|
cs |
move 버튼에 onClick리스너를 등록하여 클릭 시 EditText에 작성된 내용을 temp에 받아온다.
그리고 Intent객체를 만들고 putExtra() 메서드로 intent객체에 전달할 내용을 작성하여 Activity2로
전달한다.
다음은 두 번째 액티비티이다.
SecondActivity.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
|
package com.example.myapplication;
import androidx.appcompat.app.AppCompatActivity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
public class Activity2 extends AppCompatActivity implements View.OnClickListener {
Button btn01;
TextView result_textView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_2);
btn01 = (Button)findViewById(R.id.a2_btn_finish);
btn01.setOnClickListener(this);
result_textView = (TextView)findViewById(R.id.a2_text_result);
Intent receive_intent = getIntent();
//getIntent() 인텐트를 가져온다
String temp = receive_intent.getStringExtra("key01");
result_textView.setText(temp);
}
@Override
public void onClick(View v) {
//액티비티 종료
finish();
}
}
|
cs |
getIntent() 로 인텐트를 가져와 키값으로 작성한 내용을 받아서 TextView를 setText() 메서드로 설정해준다.
실행 화면
글을 작성하고 move 버튼을 누른다.
Intent로 데이터 전달 (결과 리턴)
Intent로 액티비티에 데이터 전달 후 결과값 받기
이번에는 두 번째 액티비티가 종료될 때 결과를 리턴하는 예제를 해보려 한다.
위의 예제와 다르게 startActivityForResult와 onActivityResult를 사용한다.
데이터 전달 (결과 리턴) + 파일 저장 예제/연습
이것도 레이아웃을 두 개를 준비한다.
save 버튼을 누르면 작성된 내용이 저장되고 clear 버튼을 누르면 작성된 내용이 모두 지워지고
addtext 버튼을 누르면 두 번째 액티비티로 이동해 editText02에 작성된 내용을 결과값으로 받아
첫 번째 액티비티에 추가하려고 한다.
activity_main.xml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
|
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout 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=".MainActivity">
<androidx.constraintlayout.widget.Guideline
android:id="@+id/h_gline01"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal"
app:layout_constraintGuide_percent="0.8" />
<androidx.constraintlayout.widget.Guideline
android:id="@+id/h_gline02"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal"
app:layout_constraintGuide_percent="0.9" />
<EditText
android:id="@+id/editText01"
android:layout_width="0dp"
android:layout_height="0dp"
android:layout_marginStart="8dp"
android:layout_marginTop="8dp"
android:layout_marginEnd="8dp"
android:layout_marginBottom="8dp"
android:ems="10"
android:inputType="textMultiLine"
android:scrollHorizontally="false"
app:layout_constraintBottom_toTopOf="@+id/h_gline01"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<Button
android:id="@+id/s_button"
android:layout_width="0dp"
android:layout_height="0dp"
android:layout_marginStart="8dp"
android:layout_marginTop="8dp"
android:layout_marginEnd="8dp"
android:layout_marginBottom="8dp"
android:text="Save"
android:textSize="18sp"
app:layout_constraintBottom_toTopOf="@+id/h_gline02"
app:layout_constraintEnd_toStartOf="@+id/c_button"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="@+id/h_gline01" />
<Button
android:id="@+id/c_button"
android:layout_width="0dp"
android:layout_height="0dp"
android:layout_marginStart="8dp"
android:layout_marginTop="8dp"
android:layout_marginEnd="8dp"
android:layout_marginBottom="8dp"
android:text="Clear"
android:textSize="18sp"
app:layout_constraintBottom_toTopOf="@+id/h_gline02"
app:layout_constraintEnd_toStartOf="@+id/at_button"
app:layout_constraintStart_toEndOf="@+id/s_button"
app:layout_constraintTop_toTopOf="@+id/h_gline01" />
<Button
android:id="@+id/at_button"
android:layout_width="0dp"
android:layout_height="0dp"
android:layout_marginStart="8dp"
android:layout_marginTop="8dp"
android:layout_marginEnd="8dp"
android:layout_marginBottom="8dp"
android:text="AddText"
android:textSize="18sp"
app:layout_constraintBottom_toTopOf="@+id/h_gline02"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toEndOf="@+id/c_button"
app:layout_constraintTop_toTopOf="@+id/h_gline01"
app:layout_constraintVertical_bias="1.0" />
<Button
android:id="@+id/f_button"
android:layout_width="0dp"
android:layout_height="0dp"
android:layout_marginStart="8dp"
android:layout_marginLeft="8dp"
android:layout_marginTop="8dp"
android:layout_marginEnd="8dp"
android:layout_marginRight="8dp"
android:layout_marginBottom="8dp"
android:text="Finish"
android:textSize="18sp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="@+id/h_gline02" />
</androidx.constraintlayout.widget.ConstraintLayout>
|
cs |
Intent로 데이터 전달(결과 리턴)과 파일 저장을 하는 액티비티 코드이다. (주석으로 자세히 설명)
MainActivity.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
|
//관련 기능 import
import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
public class MainActivity extends AppCompatActivity implements View.OnClickListener {
//저장할 내용이 있을 때 저장할 파일명
private static final String LOCAL_FILE = "memo_data.txt";
//액티비티 요청 구분자
private static final int Start_Activity = 1;
//레이아웃 객체와 연결한 변수 선언
EditText edit01;
Button s_btn, c_btn, f_btn, at_btn;
//최초로 앱을 실행하면 onCreate()가 호출
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//레이아웃과 연결
edit01 = (EditText)findViewById(R.id.editText01);
s_btn = (Button)findViewById(R.id.s_button);
c_btn = (Button)findViewById(R.id.c_button);
f_btn = (Button)findViewById(R.id.f_button);
at_btn = (Button)findViewById(R.id.at_button);
//버튼 리스너 등록
s_btn.setOnClickListener(this);
c_btn.setOnClickListener(this);
f_btn.setOnClickListener(this);
at_btn.setOnClickListener(this);
//입력 스트림 클래스들의 최상위 클래스
InputStream in;
//Reader 스트림에 버퍼링 기능을 추가한 입력 스트림 클래스
BufferedReader reader;
try{
in = openFileInput(LOCAL_FILE); //InputStream의 인스턴스를 받아오는 부분
}catch (FileNotFoundException e){
in = getResources().openRawResource(R.raw.date_file);// 작성된 파일을 패키지에 포함
}
try {
reader = new BufferedReader(new InputStreamReader(in,"UTF-8"));
String s;
while((s=reader.readLine()) != null ){ //보통 readLine()를 이용하여 한줄씩 읽어오기
edit01.append(s);
edit01.append("\n"); //한줄씩이라 \n 해줘야함
}
} catch (IOException e) {
Log.e("Local File",e.getMessage());
}
}
@Override
public void onClick(View v) {
//save 버튼으로 저장
if(v.getId() == R.id.s_button){
String s= edit01.getText().toString();
if(s.length() == 0){
deleteFile(LOCAL_FILE); //삭제
return;
}
try{
//데이터 스트림의 기본 출력 담당 (모든 출력 스트림 클래스들의 최상위 클래스)
OutputStream out;
//OutputStream의 인스턴스를 받아오는 부분
out = openFileOutput(LOCAL_FILE, MODE_PRIVATE);//MODE_PRIVATE 다른어플에서 접근 불가
//문자단위로 특정한 스트림에 작성
PrintWriter writer = new PrintWriter(new OutputStreamWriter(out,"UTF-8"));
writer.append(s);
writer.close();
}catch (IOException e){
Log.e("Local File",e.getMessage());
}
}
//clear 버튼으로 초기화
if(v.getId() == R.id.c_button){
edit01.setText("");
}
//finish 버튼으로 종료 (저장X)
if(v.getId() == R.id.f_button){
finish();
}
//addtext 버튼으로 두번째 액티비티에서 추가할 text를 받아서 작성
if(v.getId() == R.id.at_button) {
Intent intent01 = new Intent(this, SecondActivity.class);
//두번째 액티비티 실행, 실행된 액티비티가 종료되면 결과값을 받는다
startActivityForResult(intent01, Start_Activity);
}
}
//실행된 액티비티가 종료되면 onActivityResult가 호출
@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
super.onActivityResult(requestCode, resultCode, data);
//어떤 액티비티가 종료했는지 구분
if(requestCode == Start_Activity){
//결과값 상태가 RESULT_OK가 아니면 공백
if(resultCode != RESULT_OK){
edit01.append("\n");
}
//결과값 상태가 RESULT_OK면 결과값을 edit01에 추가
if(resultCode == RESULT_OK){
String result = data.getExtras().getString(SecondActivity.Set_Text);
edit01.append(result);
}
}
}
}
|
cs |
파일 저장은 [Android] 데이터 저장 방법 - 프레퍼런스, 파일 저장 를 참고
SecondActivity.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
|
import androidx.appcompat.app.AppCompatActivity;
import android.content.ContentProviderClient;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
public class SecondActivity extends AppCompatActivity implements View.OnClickListener {
//추가할 text 설정하기위한 상수
public static final String Set_Text = "SetText";
//레이아웃 객체와 연결한 변수 선언
EditText editText01;
Button btn01;
String result;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_second);
//레이아웃과 연결
editText01 = (EditText)findViewById(R.id.editText02);
btn01 = (Button)findViewById(R.id.button01);
//버튼 리스너 등록
btn01.setOnClickListener(this);
}
@Override
public void onClick(View v) {
result = editText01.getText().toString();
//리턴할 결과를 setResult로 셋팅
if(result.length() !=0){
Intent intent01 = new Intent();
intent01.putExtra(Set_Text, result);
setResult(RESULT_OK, intent01);
} else {
setResult(RESULT_CANCELED);
}
finish();
}
}
|
cs |
작성한 내용이 있으면 결과 세팅을 RESULT_OK로 하고 작성한 내용이 없으면 RESULT_CANCELED
실행 화면
addtext 버튼을 누르면 두 번째 화면으로 넘어간다.
작성 후 close 버튼을 누르면 첫 번째 화면으로 결과값을 넘긴다.
'Android' 카테고리의 다른 글
[Android] 기본 이벤트 처리 (0) | 2021.05.17 |
---|---|
[Android] 데이터 저장 방법 - 프레퍼런스, 파일 저장 (0) | 2021.05.09 |