그동안 앱의 로딩화면은 다이얼로그를 이용해서 화면에 뿌려 주었다. 그러다보니 디자인과 기능의 변경이 어려워서 만족스럽지 않았지만 그대로 두고 사용했다. 이제 ChatGPT가 있으니, 이런 고민되는 부분을 쉽게 개선가능하다.
기존의 코드는 아래와 같다.
private class MyAsyncTask extends AsyncTask<URL, Void, String> {
@Override
protected void onPreExecute() {
Log.d("KONG_MAIN", "onPreExecute");
asyncDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);
String str = m_bundle.getString("SELECT");
boolean b = str.startsWith("khnp");
if (m_bundle.getString("SELECT").startsWith("khnp")) {
asyncDialog.setMessage("공공데이터를 가져오는 중입니다..." + System.getProperty("line.separator") +"한국수력원자력 API는 30초 이상 소요될 수 있습니다.");
}
else
{
asyncDialog.setMessage("공공데이터를 가져오는 중입니다...");
}
asyncDialog.show();
super.onPreExecute();
}
ProgressDialog asyncDialog = new ProgressDialog(MainActivity.this);
@Override
protected void onProgressUpdate(Void... values) {
Log.d("KONG_MAIN", "onProgressUpdate");
super.onProgressUpdate(values);
}
@Override
protected String doInBackground(URL... urls) {
Log.d("KONG_MAIN", "doInBackground");
if (m_bundle.getString("SELECT") == "customs_tradestat") //공공데이터 GW API 서비스에 해당함
{
m_apicall.CallAPI_Json(urls[0]);
}
else
{
m_apicall.CallAPI(urls[0]);
}
try {
Thread.sleep(1000);
}
catch (Exception e) {
e.printStackTrace();
}
return m_apicall.GetResult();
}
@Override
protected void onPostExecute(String result) {
Log.d("KONG_MAIN", "onPostExecute");
if (m_bundle.getString("SELECT") == "none" || m_bundle.getString("SELECT") == "keco_airpollution")
{
m_strData = "none";
}
else
{
m_strData = result;
}
if(asyncDialog.isShowing()) asyncDialog.dismiss();
ChangeFragment();
super.onPostExecute(result);
}
@Override
protected void onCancelled() {
super.onCancelled();
if(asyncDialog.isShowing()) asyncDialog.dismiss();
Toast.makeText(getApplicationContext(), "호출이 최소되었습니다.", Toast.LENGTH_LONG).show();
}
}
이제 레이아웃에 로딩화면을 정의해두고,
아래와 같이 호출해서 사용할 수 있다.
private class MyAsyncTask extends AsyncTask<URL, Void, String> {
@Override
protected void onPreExecute() {
Log.d("KONG_MAIN", "onPreExecute");
String str = m_bundle.getString("SELECT");
boolean b = str.startsWith("khnp");
if (m_bundle.getString("SELECT").startsWith("khnp")) {
showLoading("공공데이터를 가져오는 중입니다..." + System.getProperty("line.separator") +"한국수력원자력 API는 30초 이상 소요될 수 있습니다.");
}
else
{
showLoading("공공데이터를 가져오는 중입니다...");
}
super.onPreExecute();
}
@Override
protected void onProgressUpdate(Void... values) {
Log.d("KONG_MAIN", "onProgressUpdate");
super.onProgressUpdate(values);
}
@Override
protected String doInBackground(URL... urls) {
Log.d("KONG_MAIN", "doInBackground");
if (m_bundle.getString("SELECT") == "customs_tradestat") //공공데이터 GW API 서비스에 해당함
{
m_apicall.CallAPI_Json(urls[0]);
}
else
{
m_apicall.CallAPI(urls[0]);
}
try {
Thread.sleep(1000);
}
catch (Exception e) {
e.printStackTrace();
}
return m_apicall.GetResult();
}
@Override
protected void onPostExecute(String result) {
Log.d("KONG_MAIN", "onPostExecute");
if (m_bundle.getString("SELECT") == "none" || m_bundle.getString("SELECT") == "keco_airpollution")
{
m_strData = "none";
}
else
{
m_strData = result;
}
hideLoading();
ChangeFragment();
super.onPostExecute(result);
}
@Override
protected void onCancelled() {
super.onCancelled();
hideLoading();
Toast.makeText(getApplicationContext(), "호출이 최소되었습니다.", Toast.LENGTH_LONG).show();
}
}
이제 로딩은 끝!
'IT일반' 카테고리의 다른 글
개발일지 - 안드로이드스튜디오 업그레이드 및 환경설정 (2) | 2024.08.28 |
---|---|
개발일지.. AI와 공공데이터의 만남! (0) | 2024.08.23 |
개발일지 - 콩콩데이터 남은 개발 과제. (0) | 2024.07.30 |
개발일지... 결합도를 낮추고, 응집도를 높여야 하는데 (0) | 2024.07.29 |
개발일지... (0) | 2024.07.18 |