반응형

 

안드로이드 Volley 사용법 - 로또 번호 가져오기

 

 

 

이번 시간에는 Volley를 이용하여 아래와 같이 로또회차를 입력하면 그에 해당하는 로또번호를 가져오는 예제를 작성해보도록 하겠습니다. 

 

 

 

1. Volley란?

 

Volley는 안드로이드와 서버간 통신을 더 쉽고 빠르게 도와주는 HTTP 라이브러리입니다. 

 

서버와 클라이언트간 데이터를 JSON 타입으로 주고 받을 경우 아래 예제와 같이 key-value 형태로 되어 있는 JSON 데이터를 다루어야 하는데 안드로이드에서는 JSONObject를 이용해서 JSON 데이터를 처리 할 수 있습니다.

또한, JSON 데이터를 JAVA 객체로 변환 해야하는 경우에는 GSON 라이브러리를 이용하시면 손쉽게 JSON 데이터를 JAVA 객체로 변환하여 사용하실 수 있습니다. 

 

 

 

2. 로또번호 가져오는 방법

 

로또번호는 https://www.dhlottery.co.kr/common.do?method=getLottoNumber&drwNo="로또회차번호" 를 url 에 입력하면 JSON 타입으로 로또번호를 확인할 수 있습니다. 

 

 

[입력정보]

https://www.dhlottery.co.kr/common.do?method=getLottoNumber&drwNo=861

 

[수신정보] 

{"totSellamnt":81032551000,"returnValue":"success","drwNoDate":"2019-06-01","firstWinamnt":4872108844,"drwtNo6":25,"drwtNo4":21,"firstPrzwnerCo":4,"drwtNo5":22,"bnusNo":24,"firstAccumamnt":19488435376,"drwNo":861,"drwtNo2":17,"drwtNo3":19,"drwtNo1":11}

 

 

위와 같이 수신되는 JSON 데이터를 보기 좋게 정렬하면 다음과 같이 Key : Value 값으로 구성되어 있는것을 알 수 있습니다.

 

{ 
    "totSellamnt":81032551000, 
    "returnValue":"success", 
    "drwNoDate":"2019-06-01", 
    "firstWinamnt":4872108844, 
    "drwtNo6":25, 
    "drwtNo4":21, 
    "firstPrzwnerCo":4, 
    "drwtNo5":22, 
    "bnusNo":24, 
    "firstAccumamnt":19488435376, 
    "drwNo":861, 
    "drwtNo2":17, 
    "drwtNo3":19, 
    "drwtNo1":11 
}

 

 

 

3. [예제 프로그램] - 로또번호가져오기

 

예제는 간단하게 로또회차를 입력하면 그에 해당되는 로또번호를 수신하는 예제입니다.

 

 

3-1. Gradle 추가

implementation 'com.google.code.gson:gson:2.8.6'
implementation 'com.android.volley:volley:1.1.1'

 

 

3-2. Manifests 추가

인터넷권한과 네트워크 관련 추가

 

<uses-permission android:name="android.permission.INTERNET" />

android:usesCleartextTraffic="true"

 

<uses-permission android:name="android.permission.INTERNET" />

<application
    android:allowBackup="true"
    android:icon="@mipmap/ic_launcher"
    android:label="@string/app_name"
    android:roundIcon="@mipmap/ic_launcher_round"
    android:supportsRtl="true"
    android:usesCleartextTraffic="true"
    android:theme="@style/AppTheme">
    <activity android:name=".MainActivity">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
</application>

 

 

3-3. MainActivity.java

public class MainActivity extends AppCompatActivity {

    EditText editText;
    Button button;
    TextView textView;

    String lotto_No;
    String[] lotto_number = {"drwtNo1", "drwtNo2", "drwtNo3", "drwtNo4", "drwtNo5", "drwtNo6", "bnusNo"};
    JsonObject jsonObject;
    RequestQueue requestQueue;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        editText = findViewById(R.id.editText);
        textView = findViewById(R.id.textView);
        button = findViewById(R.id.button);
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                requestLottoNumber();
            }
        });

        if (requestQueue == null) {
            requestQueue = Volley.newRequestQueue(getApplicationContext());
        }
    }

    public void requestLottoNumber() {
        lotto_No = editText.getText().toString();
        if (lotto_No.equals("")) {
            Toast.makeText(this, "로또 회차 번호를 입력해주세요", Toast.LENGTH_SHORT).show();
            return;
        }

        String url = "https://www.dhlottery.co.kr/common.do?method=getLottoNumber&drwNo=" + lotto_No;
        
        StringRequest request = new StringRequest(Request.Method.GET, url, new Response.Listener<String>() {
            @Override
            public void onResponse(String response) {
                jsonObject = (JsonObject) JsonParser.parseString(response);

                String str = lotto_No + "회차 당첨번호 : ";
                for (int i = 0; i < lotto_number.length - 1; i++) {
                    str += jsonObject.get(lotto_number[i]) + ", ";
                }
                str += " bonus: " + jsonObject.get(lotto_number[lotto_number.length-1]);

                textView.setText(str);
            }
        }, new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError error) {

            }
        }) {
            // Header나 요청 parameter를 재정의 할 수 있다.
            // GET방식에서는 url에 parameter가 함께 있어 불필요, POST 방식에서 사용
            protected Map<String, String> getParams() throws AuthFailureError {
                Map<String, String> params = new HashMap<>();
                return params;
            }
        };
        request.setShouldCache(false); // 캐싱하지 말고 매번 받은것은 다시 보여주도록 설정
        requestQueue.add(request);
    }
}

 

 

3-4. activity_main.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context=".MainActivity">

    <EditText
        android:id="@+id/editText"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="로또 회차 번호 입력" />
    <Button
        android:id="@+id/button"
        android:textSize="16dp"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="조회하기"/>
    <TextView
        android:id="@+id/textView"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="로또 당첨번호"
        android:textSize="16dp" />
</LinearLayout>

 

 

 

반응형

+ Recent posts