아하
검색 이미지
생활꿀팁 이미지
생활꿀팁생활
생활꿀팁 이미지
생활꿀팁생활
깔끔한참밀드리201
깔끔한참밀드리20119.04.09

이 코드의 StackOverflow의 해결방법이 뭔가요?

public class MainActivity extends AppCompatActivity { public EditText editText; public Button button; public LinearLayout linearLayout; public LinearLayout lll; public Button getBtn; @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); editText = findViewById(R.id.editText); button = findViewById(R.id.btn); linearLayout = findViewById(R.id.linerLayout); getBtn = findViewById(R.id.getText); getBtn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { editText.getText(); String string = editText.getText().toString(); int n = Integer.parseInt(string); for(int i=0; i<n; i++){ onClick(button); } button.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { LayoutInflater inflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE); View view = (View)inflater.inflate(R.layout.activity_inflate, null); lll = view.findViewById(R.id.LLL); linearLayout.addView(view); } }); } }); } }

E/AndroidRuntime: FATAL EXCEPTION: main

Process: com.example., PID: 32382

java.lang.StackOverflowError: stack size 8MB

at android.text.SpannableStringBuilder.checkRange(SpannableStringBuilder.java:1306)

at android.text.SpannableStringBuilder.getChars(SpannableStringBuilder.java:1191)

at android.text.SpannableStringBuilder.toString(SpannableStringBuilder.java:1213)

at com.example.ceell.testing.MainActivity$1.onClick(MainActivity.java:40)

at com.example.ceell.testing.MainActivity$1.onClick(MainActivity.java:44)

at com.example.ceell.testing.MainActivity$1.onClick(MainActivity.java:44)

at com.example.ceell.testing.MainActivity$1.onClick(MainActivity.java:44)

at com.example.ceell.testing.MainActivity$1.onClick(MainActivity.java:44)

at com.example.ceell.testing.MainActivity$1.onClick(MainActivity.java:44)

at com.example.ceell.testing.MainActivity$1.onClick(MainActivity.java:44)

at com.example.ceell.testing.MainActivity$1.onClick(MainActivity.java:44)

에러는 이렇게 뜹니다ㅠㅠ

for문이 무한루프를 도는 것 같은데 무엇이 문제인지 모르겠습니다

55글자 더 채워주세요.
답변의 개수
2개의 답변이 있어요!
  • 안녕하세요.

    흠 코드가 이상합니다. 로직 자체는 이해가 되지만 왜 이렇게 짰는지는 의문이군요. 일단 에러에 대해서만 말씀드리면 처음 버튼 클릭 받고 for안에서 다시 자기 자신의 onclick을 불렀기 때문에 무한 재귀가 발생합니다.

    For문안의 onclick을 제거하거나 재귀를 안하도록 바꿔주시면 됩니다.


  • getBtn에서 setOnClickListener를 하실 때 button.setOnClickListener를 계속해서 호출하고 계시네요.

    스코프를 for문 뒤에 하나 더 설정해보세요.

    사실 지금처럼 코드를 구성하면 퍼포먼스적으로나 추후 관리 차원에서도 좋지 않습니다.