마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

Intent사용시 앱이 죽어버리는 현상 발생합니다..

0 추천

안녕하세요.. 해보고 싶은 것이 있어서 앱을 만들기 시작한 지 3일차입니다.

글의 아래 링크 글을 봤는데 해당사항이 없는거 같아서 질문드립니다.

https://developer.android.com/guide/components/activities/background-starts

 

package unknownPG.Firstwork;

import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;

import androidx.appcompat.app.AppCompatActivity;

public class MainActivity extends AppCompatActivity {


    private Button btn_move_membership;


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

        btn_move_membership = findViewById(R.id.btn_move_membership);
        btn_move_membership.setOnClickListener(new View.OnClickListener() {


            @Override
            public void onClick(View v) {
                Intent intent = new Intent(MainActivity.this, SubActivity.class);
                startActivity(intent); //액티비티 이동 구문
            }
        });


    }

 

현재 이와 같이 코딩을 하였고.. 앱을 실행했을 때 앱이 중지되고 죽어버리네요.. 

 

Problems : Current File에는 노란색 표지판과 함께 아래와 같은 글이 쓰여져 있습니다..

Field can be converted to a local variable : 13

Anonymous new View.OnClickListener() can be replaced with lambda :22

AndroidDdobot (260 포인트) 님이 2021년 11월 25일 질문

2개의 답변

0 추천
위의 메세지는 그냥 추천하는 코드에 대한 메세지라서 에러와는 상관이 없구요, 저도 간혹가다 빼먹기도 하는데,

혹시 AndroidManifest.xml에 SecondActivity가 등록이 되어 있나요?

아니라면 관련 에러메세지가 없어서 말씀드리기가 힘들어요. 앱 크래시의 경우 로그캣에 에러메세지가 나올 겁니다. 잘 확인해 보세요.
spark (223,680 포인트) 님이 2021년 11월 25일 답변
0 추천

startActivity 는 Activity 의 메소드이지, View.OnClickListener의 메소드가 아니라. 바로 사용 안될텐데, 컴파일 된게 맞나요?

 

아래같이 별도 함수로 빼서 activity의 메소드에서 startactivity를 부르게 변경 해  보세요.

public class MainActivity extends AppCompatActivity {

    private Button btn_move_membership;

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

        btn_move_membership = findViewById(R.id.btn_move_membership);
        btn_move_membership.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
		  click();
            }
        });
    }
    
    private void click() {
	    Intent intent = new Intent(MainActivity.this, SubActivity.class);
	    startActivity(intent); //액티비티 이동 구문
    }
}

 

익명사용자 님이 2021년 11월 26일 답변
btn_move_membership의 onClickListener 안에서 Activity에 속한 startActivity 메소드를 사용할 수 없다면 click()도 사용할 수 없어야 맞습니다. 아래처럼 startActivity를 오버라이드 하는 형태로 바꾸어 놓으면
알기가 쉬워집니다.

public class MainActivity extends AppCompatActivity {
 
    private Button btn_move_membership;
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
 
        btn_move_membership = findViewById(R.id.btn_move_membership);
        btn_move_membership.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
               Intent intent = new Intent(MainActivity.this, SubActivity.class);
               startActivity(intent); //액티비티 이동 구문
            }
        });
    }
     
    private void click() {
        ...
    }

    @Override
    public void startActivity(Intent intent) {
        super.startActivity(intent);
    }
}

물론 onClickListner안을 밖으로 빼는 게 더 코드를 읽거나 고치기에 좋구요.
...