
* 겪고 있는 문제 상황을 최대한 자세하게 작성해주세요.
* 문제 해결을 위해 어떤 시도를 해보았는지 구체적으로 함께 알려주세요.
로또예제 완성 앱에서 실행하면 인스톨은 성공하였다고 나오는데
화면과 같이 "로또 정보를 가져오는데 실패 하였습니다. 잠시후 다시 이용해 주세요" 표시되고 멈춤니다.
로또정보를 왜 못가져오는지 모르겠습니다.

<?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"
android:paddingHorizontal="30dp"
android:textColor="#FF000000"
tools:context=".MainActivity">
<TextView
android:layout_width="wrap_content"
android:layout_height="36dp"
android:layout_marginTop="60dp"
android:background="@drawable/title_background"
android:foregroundTint="#747676"
android:gravity="center"
android:paddingHorizontal="15sp"
android:text="@string/headline"
android:textColor="#FFFFFFFF"
android:textSize="18sp"
android:textStyle="bold"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.497"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<EditText
android:id="@+id/search_view"
android:layout_width="280dp"
android:layout_height="35dp"
android:layout_marginStart="16dp"
android:layout_marginTop="124dp"
android:layout_marginEnd="8dp"
android:background="#E4EBF0"
android:hint="@string/numbers"
android:importantForAutofill="no"
android:inputType="numberDecimal"
android:paddingHorizontal="20dp"
android:textSize="12sp"
app:layout_constraintEnd_toStartOf="@id/search_button"
app:layout_constraintHorizontal_bias="0.0"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<ImageButton
android:id="@+id/search_button"
android:layout_width="35dp"
android:layout_height="35dp"
android:layout_marginEnd="8dp"
android:background="@drawable/circle_background"
android:contentDescription="@+id/search_button"
android:scaleType="center"
android:src="@drawable/ic_search"
android:visibility="visible"
app:layout_constraintBottom_toBottomOf="@id/search_view"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toEndOf="@+id/search_view"
app:layout_constraintTop_toTopOf="@id/search_view"
app:layout_constraintVertical_bias="1.0" />
<TextView
android:id="@+id/win_result_text_view"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginTop="44dp"
android:gravity="center_horizontal"
android:textSize="31sp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.0"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/search_view"
tools:text="23회 당첨 결과" />
<TextView
android:id="@+id/date_view"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginTop="4dp"
android:gravity="center_horizontal"
android:text="@string/textview"
android:textColor="#6A7177"
android:textSize="20sp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/win_result_text_view"
tools:layout_editor_absoluteY="166dp"
tools:text="2023-12-23" />
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/win_numbers_layout"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginTop="28dp"
android:background="@drawable/rectangle_background"
android:backgroundTint="#FFFFFF"
android:paddingHorizontal="27dp"
android:paddingVertical="26dp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/date_view">
<TextView
android:id="@+id/win_number_text"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginTop="2dp"
android:text="@string/winNum"
android:textColor="#5F666B"
android:textSize="20sp"
android:textStyle="bold"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<ImageView
android:id="@+id/arrow_left"
android:layout_width="20dp"
android:layout_height="14dp"
android:layout_gravity="center"
android:layout_margin="3dp"
android:background="@drawable/ripple_background"
android:contentDescription="@+id/arrow_left"
android:gravity="center"
android:scaleType="fitCenter"
android:src="@drawable/ic_arrow_left"
app:layout_constraintBottom_toBottomOf="@id/number_layout_2"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="@id/number_layout_1" />
<ImageView
android:id="@+id/arrow_right"
android:layout_width="20dp"
android:layout_height="14dp"
android:layout_gravity="center"
android:layout_margin="3dp"
android:background="@drawable/ripple_background"
android:contentDescription="@+id/arrow_right"
android:gravity="center"
android:scaleType="fitCenter"
android:src="@drawable/ic_arrow_right"
app:layout_constraintBottom_toBottomOf="@id/number_layout_2"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="@id/number_layout_1" />
<LinearLayout
android:id="@+id/number_layout_1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="22dp"
android:orientation="horizontal"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/win_number_text">
<TextView
android:id="@+id/number_1_text"
android:layout_width="53dp"
android:layout_height="53dp"
android:layout_margin="3dp"
android:layout_weight="1"
android:background="@drawable/number_background_blue"
android:gravity="center"
android:includeFontPadding="false"
android:text="@string/No1"
android:textColor="#FFFFFF"
android:textSize="27sp"
android:textStyle="bold" />
<TextView
android:id="@+id/number_2_text"
android:layout_width="53dp"
android:layout_height="53dp"
android:layout_margin="3dp"
android:layout_weight="1"
android:background="@drawable/number_background_blue"
android:gravity="center"
android:includeFontPadding="false"
android:text="@string/No2"
android:textColor="@color/white"
android:textSize="27sp"
android:textStyle="bold" />
<TextView
android:id="@+id/number_3_text"
android:layout_width="53dp"
android:layout_height="53dp"
android:layout_margin="3dp"
android:layout_weight="1"
android:background="@drawable/number_background_red"
android:gravity="center"
android:includeFontPadding="false"
android:text="@string/No3"
android:textColor="#FFFFFF"
android:textSize="27sp"
android:textStyle="bold" />
<TextView
android:id="@+id/number_4_text"
android:layout_width="53dp"
android:layout_height="53dp"
android:layout_margin="3dp"
android:layout_weight="1"
android:background="@drawable/number_background_red"
android:gravity="center"
android:includeFontPadding="false"
android:text="@string/No4"
android:textColor="#FFFFFF"
android:textSize="27sp"
android:textStyle="bold" />
</LinearLayout>
<!-- 두 번째 가로 LinearLayout -->
<LinearLayout
android:id="@+id/number_layout_2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="7dp"
android:orientation="horizontal"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/number_layout_1">
<TextView
android:id="@+id/number_5_text"
android:layout_width="53dp"
android:layout_height="53dp"
android:layout_margin="3dp"
android:background="@drawable/number_background_gray"
android:gravity="center"
android:includeFontPadding="false"
android:text="@string/No5"
android:textColor="#FFFFFF"
android:textSize="27sp"
android:textStyle="bold" />
<TextView
android:id="@+id/number_6_text"
android:layout_width="53dp"
android:layout_height="53dp"
android:layout_margin="3dp"
android:background="@drawable/number_background_gray"
android:gravity="center"
android:includeFontPadding="false"
android:text="@string/No6"
android:textColor="#FFFFFF"
android:textSize="27sp"
android:textStyle="bold" />
<ImageView
android:id="@+id/plus_view"
android:layout_width="53dp"
android:layout_height="15dp"
android:layout_gravity="center"
android:layout_margin="3dp"
android:contentDescription="@+id/plus_view"
android:includeFontPadding="false"
android:gravity="center"
android:scaleType="fitCenter"
android:src="@drawable/ic_plus"
android:textStyle="bold" />
<TextView
android:id="@+id/number_bonus_text"
android:layout_width="53dp"
android:layout_height="53dp"
android:layout_margin="3dp"
android:includeFontPadding="false"
android:background="@drawable/number_background_green"
android:gravity="center"
android:text="@string/Nob"
android:textColor="#FFFFFF"
android:textSize="27sp"
android:textStyle="bold" />
</LinearLayout>
</androidx.constraintlayout.widget.ConstraintLayout>
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginTop="28dp"
android:background="@drawable/rectangle_background"
android:paddingHorizontal="27dp"
android:paddingVertical="20dp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/win_numbers_layout">
<ImageView
android:id="@+id/icon_star"
android:layout_width="16dp"
android:layout_height="16dp"
android:contentDescription="@+id/icon_star"
android:src="@drawable/ic_inside_star"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<TextView
android:id="@+id/win_text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="10dp"
android:text="@string/win_1"
android:textColor="#666666"
android:textStyle="bold"
app:layout_constraintBottom_toBottomOf="@id/icon_star"
app:layout_constraintStart_toEndOf="@id/icon_star"
app:layout_constraintTop_toTopOf="@id/icon_star" />
<TextView
android:id="@+id/win_amount_text"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginTop="2dp"
android:gravity="center_horizontal"
android:text="@string/win_prize"
android:textSize="16sp"
android:textColor="#3A3E41"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/win_text" />
<TextView
android:id="@+id/win_1_amount_text"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginTop="4dp"
android:gravity="center_horizontal"
android:text="@string/win_prize_1"
android:textColor="#6A7177"
android:textSize="14sp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/win_amount_text" />
</androidx.constraintlayout.widget.ConstraintLayout>
</androidx.constraintlayout.widget.ConstraintLayout>
package com.example.lottoapp
import android.os.Bundle
import android.text.Html
import android.text.Html.FROM_HTML_MODE_COMPACT
import android.text.Spanned
import android.widget.Toast
import androidx.annotation.StringRes
import androidx.appcompat.app.AppCompatActivity
import com.example.lottoapp.data.LottoData
import com.example.lottoapp.databinding.ActivityMainBinding
class MainActivity : AppCompatActivity() {
private var number: Int = 1103private lateinit var binding: ActivityMainBindingprivate val lottoController by lazy { LottoController() }
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding = ActivityMainBinding.inflate(layoutInflater)
setContentView(binding.root)
fetchLottoData(number)
with(binding) {
searchButton.setOnClickListener {
number = searchView.text.toString().toInt()
fetchLottoData(number)
}
arrowLeft.setOnClickListener {
number = number.dec()
fetchLottoData(number)
}
arrowRight.setOnClickListener {
number = number.inc()
fetchLottoData(number)
}
}
}
private fun fetchLottoData(number: Int) {
lottoController.getLottoNumber(number, { lottoData ->
updateUI(lottoData)
}, { _ ->
Toast.makeText(
this@MainActivity,
"로또 정보를 가져오는데 실패했습니다. 잠시 후 다시 이용해주세요.",
Toast.LENGTH_LONG
).show()
})
}
private fun updateUI(data: LottoData) {
with(binding) {
winResultTextView.text = getHtmlText(R.string.winning_result, number.toString())
dateView.text = data.data
val listWinNumberView =
listOf(number1Text, number2Text, number3Text, number4Text, number5Text, number6Text)
listWinNumberView.mapIndexed { index, tv ->
val numbers = data.winNumbers
tv.text = if (numbers.isNotEmpty()) numbers[index] else ""
}
numberBonusText.text = data.bonusNumber
val prize = data.totalWinPrize.toBillion()
winAmountText.text = getHtmlText(R.string.win_prize, prize)
val prizeOne = data.winPrize.toBillion()
win1AmountText.text = getHtmlText(R.string.win_prize_1, prizeOne)
}
}
private fun String.toBillion(): String {
return if (this != "") (this.toLong() / 100_000_000).toString() else this
}
private fun getHtmlText(@StringRes id: Int, data: String): Spanned {
val text: String = getString(id, data)
return Html.fromHtml(text, FROM_HTML_MODE_COMPACT)
}
}
