OSD600 - 나의 네 번째 Hacktoberfest 기여

1. 소개



이번 학기에는 Android 플랫폼용 모바일 애플리케이션 개발에 관한 Mobile App Development - Android(MAP524)에도 참석합니다. 모바일 앱 디자인에 관심이 많아서 Git Hub에서 Hacktoberfest 레이블이 있는 모든 Android 프로젝트를 검색했습니다. 운 좋게도 Androapps이라는 이름을 찾았습니다. 이 프로젝트에는 많은 개발자가 기여한 많은 Android 애플리케이션이 포함되어 있습니다. 그리고 나는 참여하기로 결정했습니다.

2. 문제



issue 저에게 할당된 작업은 날씨 예보 응용 프로그램을 만드는 것입니다. 관리자는 매우 태평합니다. 그는 앱이 어떻게 보여야 하는지에 대해 엄격하지 않았지만 저에게 창의력을 발휘할 수 있는 자유를 주었습니다.

3. 솔루션



내 응용 프로그램을 만들기 위해 수행한 단계는 다음과 같습니다.
  • 날씨 API 찾기
  • 빠른 조사 후 JSON 개체를 반환하는 Open Weather Map을 사용하기로 결정했습니다. 이를 사용하는 방법에 대한 자세한 내용은 guide을 참조하십시오.



  • UI 디자인
  • 방금 MAP524에서 일부 레이아웃과 기본 보기에 대해 배웠으므로 사용자 입력을 가져오는 EditText, 입력을 제출하는 Button, 정보를 표시하는 일부TextView로 간단한 UI를 디자인할 것입니다. 및 앱 배경용 ImageView.
  • UI 디자인:


  • Java 코드 구현
    1) Volley 라이브러리를 사용하여 API에서 데이터를 요청합니다.
    2) 응답에서 JSON 개체/데이터 가져오기:

  •  // gets JSON objects
    JSONObject mainWeather = response.getJSONObject("main");
    JSONObject weather = response.getJSONArray("weather").getJSONObject(0);
    JSONObject windInfo = response.getJSONObject("wind");
    JSONObject sunInfo = response.getJSONObject("sys");
    int humidity = mainWeather.getInt("humidity");
    double windSpeed = windInfo.getDouble("speed");
    


    3) 데이터 계산:

    // converts unix time stamp to date
    Date dateInfo = new Date(response.getLong("dt")*1000);
    Date sunRiseD = new Date(sunInfo.getLong("sunrise") * 1000);
    Date sunSetD = new Date(sunInfo.getLong("sunset") * 1000);
    int timezone = response.getInt("timezone");
    
     // formats output and changes timezone
    @SuppressLint("SimpleDateFormat") SimpleDateFormat dateFormat = new SimpleDateFormat("EEEE, dd MMM yyyy");         
    dateFormat.setTimeZone(TimeZone.getTimeZone(ZoneOffset.ofTotalSeconds(timezone)));
    
    @SuppressLint("SimpleDateFormat") SimpleDateFormat timeFormat = new SimpleDateFormat("HH:mm a");           
    timeFormat.setTimeZone(TimeZone.getTimeZone(ZoneOffset.ofTotalSeconds(timezone)));
    
     int tempC = (int) (Math.round(mainWeather.getDouble("temp") - 273.15));
     int feelTemp = (int)(Math.round(mainWeather.getDouble("feels_like") - 273.15));
    


    4) 데이터를 UI에 적절하게 표시합니다.

    currentDate.setText(dateStr);
    currentTime.setText(timeStr);
    temperature.setText(tempC + "°");
    location.setText(city.toUpperCase());          
    displayWeather.setText(weather.getString("main"));
    feels.setText("Feels like: " + feelTemp + "°C");
    humid.setText(humidity + "%");
    wind.setText(windSpeed + "m/s");
    sunRise.setText(sunRiseStr);
    sunSet.setText(sunSetStr);
    


    5) 시간에 따른 글자색ImageView 및 글자색을 설정하는 기능

    void setBackground(int hour, ImageView imgV){...}
    


    View the app

    메인테이너는 PR을 매우 빠르게 검토했고, 요구 사항 없이 내 PR을 병합했습니다.

    앱에 대한 자세한 정보를 얻으려면 여기PR를 살펴보십시오.

    4. 전반적으로



    이 문제를 완료한 후 많은 새로운 정보를 얻었습니다. 고통스럽고 동시에 즐거웠습니다.
    게시물을 읽어 주셔서 감사합니다.

    즐거운 코딩!

    좋은 웹페이지 즐겨찾기