본문 바로가기
IT기술(코딩)

안드로이드 스튜디오 날씨 API 적용하기 [아주 쉽게 설명][java]

by 크리에이트매이커 2020. 8. 4.
반응형

안녕하세요 여러분.

오늘은 안드로이드 스튜디오에 날씨API 적용하는 방법에 대해 알려드릴게요.

이를 바탕으로 다른 API들도 응용해서 사용해보시길 바라요~

 

기본적으로 코드(KEY) 신청을 했다는 가정하에 글을 작성할게요!!

 

저는 OpenWeatherMap API를 사용했어요. 페이지는

https://openweathermap.org/api

 

Weather API - OpenWeatherMap

Please sign up and use our fast and easy-to-work weather APIs for free. Look at our monthly subscriptions for more options rather than the Free account that we provide you. Read How to start first and enjoy using our powerful weather APIs.

openweathermap.org

에요.

 

여기서 

제가 고른 API

저는 Current & Forecatst API를 선택했어요. 

설명서는 저  API doc을 누르면 나오는데 역시나 설명이 알아들을 수 없게 돼있더라구요. 

그래서 열심히 공부해서 간단하게 하는법을 찾았어요.

 

자..

안드로이드 스튜디오 java 코딩을 할 줄 안다는 가정하에 글을 올리게용.

먼저 설명서 스샷.

이런식으로 쓰라고 나와있죠.

import android.app.Application;

import org.json.JSONArray;
import org.json.JSONObject;

import retrofit2.Call;
import retrofit2.http.GET;
import retrofit2.http.Query;

public interface WeatherApi {
    public static final String API_URL = "https://api.openweathermap.org/"; //저랑 같은 날씨 API를
    //쓰면 같아요. 이게 BASE_URL 이 될 수 도 있어요.

    @GET("data/2.5/weather") //BASE_URL과 get괄호 안에를 합치면 설명서에 나와있는 주소가 돼요.
    Call<Object> getWeather(@Query("q") String q, @Query("appid") String appid);
// q 는 설명서에 ?q 부분이고 appid 도 설명서에 appid 부분이에요. 즉, 설명서 API주소를 이런식으로 맟추는거에요.
}

설명서랑 코딩이랑 비교해 보면 딱 알겠죠? URL에 뭐쓰고 get에는 뭐쓰고 call 부분에 쿼리에는 뭐쓰는지 ㅎㅎ..

사실 interface 까지 만들어서 할 필요는 없지만 체계적인 코딩을 위해서 이렇게 연습하는걸 추천드려용

 

API사용 하는 엑티비티 부분이에요!

import android.app.Activity;
import android.os.Bundle;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;

import java.io.IOException;

import retrofit2.Call;
import retrofit2.Retrofit;
import retrofit2.converter.gson.GsonConverterFactory;

public class TwoFood extends Activity {

    Retrofit retrofit;
    WeatherApi weatherApi;
    private final static String appKey = "내 코드";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.내 액티비티);

        retrofit = new Retrofit.Builder().baseUrl("https://api.openweathermap.org/").addConverterFactory(GsonConverterFactory.create()).build();
        weatherApi = retrofit.create(WeatherApi.class);
        Call<Object> getWeather = weatherApi.getWeather("London",appKey); //나라는 런던 으로 걍 했어용

        try{
            System.out.println(getWeather.execute().body());
        }catch (IOException e){
            e.printStackTrace();
        }



    }

}

코드를 보시면 알겠지만 interface를 기본으로 간단하게 작성했어요.

baseUrl의 주소는 interface WeatherApi의 url과 똑같죠? 그냥 삽입해도 돼요.

 

저 코드를 java 메인 함수로 해서 결과를 출력하면.

해당 나라 날씨정보

이렇게 날씨 정보가 나와요!

 

gson형식인데 알아서 json으로 바꾸어서 틀에 맞게 사용하시면 됩니다!!

 

질문있으면 댓글 달아주세요~

 

안녕~

반응형