엑티비티간의 데이터 전송(기본데이터형) -1 + Log
에 이어서 진행합니다.
이번에는 이어서 두 엑티비티간의 데이터를 주고 받는 방법을 알아보겠습니다.
Intent intent3 = new Intent(MainActivity.this,Main2Activity.class);
startActivity(intent3);
로 Main2Activity를 실행시킬수있었는데요
putExtra(key, value) 메소드를 이용해서 데이터들을 전송할수있습니다.
다양한 데이터 타입을 전송할수있는것을 알수있습니다.
기본 데이터 타입이 아닌 자신이 구성한 클래스등을 전송하려면 약간의 추가 사항이 필요합니다 이것은 다음강의에서 알아보도록하겠습니다.
우리가가진 string인 핸드폰 번호(num_textView에 입력되있음)와 1234라는 임의의 숫자를 Main2Activity로 전송해보도록 하겠습니다.
다음과 같이 intent3 부분에 putExtra 메소드를 추가합니다.
case R.id.activity2_btn :
Intent intent3 = new Intent(MainActivity.this,Main2Activity.class);
intent3.putExtra("tel",num_textView.getText().toString());
intent3.putExtra("cnum",1234);
startActivity(intent3);
break;
이제 전송준비는 끝났습니다. Main2Activity.java 파일로 이동하여 해당 자료를 받아보도록합시다.
멤버에 Intent intent를 추가하고
전화번호와 임의의 숫자를 받을것이므로 String phone, int cnum 또한 멤버에 추가하고
setContentView()아래에 intent= getIntent();를 입력하여 인텐트를 받습니다.
Main2Activity
public class Main2Activity extends AppCompatActivity {
Intent intent; //멤버추가
String phone;
int cnum;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main2);
intent = getIntent(); //getIntent()로 받을준비
}
}
먼저 intent3.putExtra(“tel”,num_textView.getText().toString());로
key를 tel 데이터가 num_textView.getText().toString을 전송한부분을 Main2Activity에서 받아보도록하겠습니다. String 타입을 전송했으므로 intent에서 String을 받아야합니다
getStringExtra(key)를 통해서 string을 받을수 있습니다.
phone = intent.getStringExtra("tel"); 을 추가합니다.
이제 번호를 받았으니 int형의 cnum부분을 받아야합니다.
intent.getIntExtra(“key”,default_value)를 이용하여 받을수있습니다.
getStringExtra와 다른 점은 default_value를 필요로하다는것인데 이는 이전 엑티비티에서 새 엑티비티를 호출할때 intent로 데이터를 넘겨주지 않았을때 기본 데이터를 넣어주는 역할을 수행합니다.
실습 해보시려면 MainActivity에서 intent3.putExtra(“cnum”,1234);부분을 주석처리하시면 실습해보실수있습니다.
cnum = intent.getIntExtra("cnum",0);을 추가합니다
public class Main2Activity extends AppCompatActivity {
Intent intent;
String phone;
int cnum;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main2);
intent = getIntent();
phone = intent.getStringExtra("tel");
cnum = intent.getIntExtra("cnum",0);
}
}
이제 잘 나오는지 확인을 해보도록합시다.
우리는 지금까지 Toast와 TextView 등 위젯에 데이터를 입력하여 화면에 출력하는방법을 했었는데요 이번에는 안드로이드에서 제공하는 Log툴을 이용하여 데이터를 확인해보도록하겠습니다.
Log.v(String tag,String message)
을 통하여 tag부분에 메시지의 이름 message 부분에 message를 입력하면 출력이됩니다.
다음의 코드를 추가 하여 줍니다.
Log.v("Main2Activity","phone : " + phone);
Log.v("Main2Activity","cnum : " + cnum);
Main2Activity
public class Main2Activity extends AppCompatActivity {
Intent intent;
String phone;
int cnum;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main2);
intent = getIntent();
phone = intent.getStringExtra("tel");
cnum = intent.getIntExtra("cnum", 0);
Log.v("Main2Activity","phone : " + phone);
Log.v("Main2Activity","cnum : " + cnum);
}
}
이제 애뮬레이터로 실행을해봅니다.
Activity2버튼을 클릭합니다
화면에 아무런 변화가 없는것을 볼수있습니다.
Log는 화면에 보이는것이아닌 안드로이드 스튜디오에 Logcat이라는 툴부분 보이는 기능입니다. 안드로이드 스튜디오에 하단에 다음부분을 확인해봅시다
다음과 같이 로그가 출력된것을 확인할수있습니다
저는 애뮬레이터에서 실행했기때문에 이렇게 로그를 쉽게 확인할수있었지만 핸드폰의 경우 다른 앱에서 실행되는 로그들 때문에 위로 올라가 버려서 확인이 힘든 경우가 생길수있습니다.
검색부분에 우리가 Tag로 입력했던 Main2Activity를 입력해봅시다다음과 같이 Main2Activity만 출력되는것을 볼수있습니다.
로그 레벨 교체
안드로이드 Log.v, Log.d, Log.i 등 각각의 역할 등에 따라서 구별하여 Log를 level 에 따라서 출력할수 있게 카테고리가 나누어져있습니다. 이는 나누어 놓았을 뿐이지 중요한 기능은 아닙니다.
검색 기능을 통해서가 아니라 계속해서 TAG를 필터링하여 보고싶을때는
Edit Filter Configuration 기능을 이용하면됩니다.
다음과 같은 화면이 뜨는데 가장 간단하게 하는방법은 Log_TAG에 입력한 TAG를 입력하고 Log Level 부분을 맞추고 OK를 누르면됩니다.
우리의 예제에 맞게 간단한 필터 설정
가장오른쪽에 필터 부분을 FilterName에 맞게 변경하면 다음과 같이 필터가 되어 뜨는것을 볼수있습니다.
다음 강좌에는 Main2Activity를 종료할때 데이터를 MainActivity에 전송해주는 실습을하겠습니다.