상황:
EditText 10개 선언하여 인텐트로 정보를 담아서 사용하려 했는데,
갑자기 화면이동이 안된다.???
이게 무슨일인가 싶었습니다.
혹시나, 이러한 문제에 직면하셨다면 운이 좋으시네요.
해결할 수 있습니다!!!
저는 EditText를 10여개 정도 선언을 하여, 입력을 받은 텍스트를 변환하여 화면이동을 하려했습니다.
물론, 인텐트 사용법을 알고 있었기에, 간단하게 할 수 있는 작업이라 생각했습니다.
변수를 주구장창 써서 선언을 하고,,,
onCreate()에서 변수를 할당해주었습니다.
그리고 이 입력창에 오기전에 메인 화면에서 이동하기 위해 버튼을 누르면 인텐트로 화면 전환이 되게 하였습니다.
그런데, 여기서, 문제였습니다. 인텐트는 분명 제가 변수를 많이 생성한 액티비티에 와있다고 하는데,
화면전환이 안되고, 계속해서 앱이 꺼지는 현상 발생.
식은땀..
침착하게 로그를 확인했습니다.
역시나 에러구나!!
어디냐 어디냐!! 파란색 글자를 찾아다녔습니다. (보통 해당 문제 지점을 가르켜주죠)
없었습니다.
갸우뚱 하였으나 침착하게 로그를 읽었습니다.
Java.lang! 오 그래 자바겠지, NullPointerException !
오 그래 널값이 났구나,
알았습니다. 알고 있었습니다. 근데 대체 어디서 널값이 난지 모르겠더군요.
보통 edittext에 변수를 할당하여도 null값 예외처리를 안해도 선언이되고 사용할 수 있엇습니다.
(분명히..)
몇일 전에는 이런 생각 조차 못하고
주구장창 인텐트가 문제가 있는줄 알고 찾았습니다.
그리고 무엇보다 저 nullpointerexception에서 toString()메서드를 사용했다고
잘못 참고를 하고 있다고 하여서, 무지하게 toString()을 찾아다녔습니다. 구라였습니다.
그냥 제가 영어를 못하나봅니다.
그렇게 한 12시간이 지났습니다. 밤에도 새벽에 잤습니다. (새벽 4시)
너무 어이가 없어서 제가 액티비티를 잘못 구현했나 하여
이 항목들이 별루 없어보이지만 이틀이나 걸렸습니다.
아무튼...
그리하여 찾은 방법은
EditText 예외처리 였습니다.
안드로이드 스튜디오가 로그창의 기능은 뛰어나지만, 이러한 사소한? 것도 좀 알려줬음 했습니다. ㅋㅋ
그냥 제 실력의 수준을 느끼며 너무 힘들었습니다.
검색을 해도 다 각자 다른 형태여서
저에게는 도움이 안되었는데,
혹여나 저랑 비슷한 방법을 사용하시다 문제가 되어 오시게 된 분이 있다면
다행이라고 생각하며 글을 썻씁니다. 노트북을 ㄱ미친놈처럼 치면서..............
아래에 해결 방안이 있으니 꼭 꼼꼼히 보시고 본인의 코드로 만들으셔서
해결하시기 바랍니다!!!!!!!!!!!!!!!
해결:
수정 수정입니다. 이 방법으로 했어요 .
Try Catch문으로 예외처리 하니 깔끔하게 오류 안났습니다. ㅋ
try { //예외처리
sender_name.findViewById(R.id.et_direct_sender);
sender_tel1.findViewById(R.id.et_direct_sender_tel1);
sender_tel2.findViewById(R.id.et_direct_sender_tel2);
sender_tel3.findViewById(R.id.et_direct_sender_tel3);
recipient_name.findViewById(R.id.et_direct_recipient);
recipient_tel1.findViewById(R.id.et_direct_recipient_tel1);
recipient_tel2.findViewById(R.id.et_direct_recipient_tel2);
recipient_tel3.findViewById(R.id.et_direct_recipient_tel3);
address_num.findViewById(R.id.et_direct_address_num);
address_detail1.findViewById(R.id.et_direct_address_show);
address_detail2.findViewById(R.id.et_direct_address_detail);
}catch (NullPointerException e){
Log.d(LOG_TAG, "아무것도 안쓴상태"+e);
}
public int EtNullCheck(EditText a){
return a.getText().toString().length();
}
public int SpNullCheck(Spinner b){
return b.getSelectedItem().toString().length();
}
저는 그냥 Oncreate에다가 너무 누더기 처럼 하고 싶지 않아서, 메서드를 생성하여 널값 체크를 하엿습니다.
이렇게 메서드를 생성하여 만들어준뒤, 리턴을 해당 EditText의 길이가 리런퇴게 해줍니다.
( 더 좋은 방법이 있겠지만 저는 그냥 지친 상태라 더이상 고민안하기로 했습니다!!!!!!!!!!!)
//중략....
//예외처리
if(EtNullCheck(sender_name) + EtNullCheck(sender_tel1) + EtNullCheck(sender_tel2) + EtNullCheck(sender_tel3) == 0){
Log.d(LOG_TAG, "보내는 사람 값이 없는 상태");
}else{
senderList.add(0,sender_name.getText().toString());
senderList.add(1,sender_tel1.getText().toString());
senderList.add(2,sender_tel2.getText().toString());
senderList.add(3,sender_tel3.getText().toString());
}
if(EtNullCheck(recipient_name) + EtNullCheck(recipient_tel1) +EtNullCheck(recipient_tel2) + EtNullCheck(recipient_tel3) == 0){
Log.d(LOG_TAG, "받는 사람 값이 없는 상태");
}else{
recipientList.add(0,recipient_name.getText().toString());
recipientList.add(1,recipient_tel1.getText().toString());
recipientList.add(2,recipient_tel2.getText().toString());
recipientList.add(3,recipient_tel3.getText().toString());
}
}//OnCreate
그리고 그냥 가정문을 통해서 length다 더해주고, 다합쳐서 0 이면 비어있는거라고 예외처리를 하였습니다.
후 이제 입력된 값을 할당하여 다음 화면으로 데이터를 보내야겠습니다.
이상입니다.
전체코드입니다.
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_order_direct_info);
Intent now = getIntent();
sender_name = (EditText) findViewById(R.id.et_direct_sender);
sender_tel1 = (EditText) findViewById(R.id.et_direct_sender_tel1);
sender_tel2 = (EditText) findViewById(R.id.et_direct_sender_tel2);
sender_tel3 = (EditText) findViewById(R.id.et_direct_sender_tel3);
recipient_name = (EditText) findViewById(R.id.et_direct_recipient);
recipient_tel1 = (EditText) findViewById(R.id.et_direct_recipient_tel1);
recipient_tel2 = (EditText) findViewById(R.id.et_direct_recipient_tel2);
recipient_tel3 = (EditText) findViewById(R.id.et_direct_recipient_tel3);
address_num = (EditText) findViewById(R.id.et_direct_address_num);
address_detail1 = (EditText) findViewById(R.id.et_direct_address_show);
address_detail2 = (EditText) findViewById(R.id.et_direct_address_detail);
direct_Next = (Button) findViewById(R.id.btn_direct_next);
setResult(1);
//예외처리
if(EtNullCheck(sender_name) + EtNullCheck(sender_tel1) + EtNullCheck(sender_tel2) + EtNullCheck(sender_tel3) == 0){
Log.d(LOG_TAG, "보내는 사람 값이 없는 상태");
}else{
senderList.add(0,sender_name.getText().toString());
senderList.add(1,sender_tel1.getText().toString());
senderList.add(2,sender_tel2.getText().toString());
senderList.add(3,sender_tel3.getText().toString());
}
if(EtNullCheck(recipient_name) + EtNullCheck(recipient_tel1) +EtNullCheck(recipient_tel2) + EtNullCheck(recipient_tel3) == 0){
Log.d(LOG_TAG, "받는 사람 값이 없는 상태");
}else{
recipientList.add(0,recipient_name.getText().toString());
recipientList.add(1,recipient_tel1.getText().toString());
recipientList.add(2,recipient_tel2.getText().toString());
recipientList.add(3,recipient_tel3.getText().toString());
}
}//OnCreate
@Override
protected void onStart() {
super.onStart();
Log.d(LOG_TAG, "보내는 사람 리스트:: " +senderList);
Log.d(LOG_TAG, "받는 사람 리스트:: " +recipientList);
}
public int EtNullCheck(EditText a){
return a.getText().toString().length();
}
public int SpNullCheck(Spinner b){
return b.getSelectedItem().toString().length();
}
'Programming > Bugs Life' 카테고리의 다른 글
[Android] Plugin Error (0) | 2020.12.04 |
---|---|
[Android] Invalid VCS root mapping ERROR Trouble Shooting Error (0) | 2020.10.28 |
[Android] Caused by: java.lang.NullPointerException (0) | 2020.10.21 |