본문 바로가기

안드로이드/코드

[안드로이드] Volley, Json을 이용해서 로또 당첨번호 조회하기

반응형

 

 

 

volley2

 

 

 

volley1

 

로또 api와 Volley, Json을 이용해서 원하는 회차의 로또 당첨번호를 가져오는 예제를 만들어보겠습니다.

 

1. AndroidManifest.xml

<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:theme="@style/AppTheme"
        android:usesCleartextTraffic="true">
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

추가된 부분

<uses-permission android:name="android.permission.INTERNET"/> - 인터넷 권한

android:usesCleartextTraffic="true" - 네트워크 트래픽 사용 (기본이 false), 네트워크 보안정책으로 인해서 추가해주셔야 합니다.

 

 

2. build.gradle(Module: app)

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

Volley, gson을 추가해줍니다.

 

3. activity_main.xml

<?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"
    tools:context=".MainActivity">

    <EditText
        android:id="@+id/et"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:gravity="center"
        android:hint="조회할 회차 번호를 입력하세요"
        android:imeOptions="actionDone"
        android:inputType="number"
        app:layout_constraintTop_toTopOf="parent" />

    <Button
        android:id="@+id/bt"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="40dp"
        android:text="불러오기"
        android:textColor="@android:color/black"
        android:textSize="20sp"
        app:layout_constraintTop_toBottomOf="@+id/et"
        tools:layout_editor_absoluteX="0dp" />

    <TextView
        android:id="@+id/tv"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="60dp"
        android:gravity="center"
        android:text="당첨번호"
        android:textColor="@android:color/black"
        android:textSize="20sp"
        app:layout_constraintTop_toBottomOf="@+id/bt"
        tools:layout_editor_absoluteX="0dp" />


</androidx.constraintlayout.widget.ConstraintLayout>

 

 

4. MainActivity.java

import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;
import androidx.appcompat.app.AppCompatActivity;
import com.android.volley.AuthFailureError;
import com.android.volley.Request;
import com.android.volley.RequestQueue;
import com.android.volley.Response;
import com.android.volley.VolleyError;
import com.android.volley.toolbox.StringRequest;
import com.android.volley.toolbox.Volley;
import com.google.gson.JsonObject;
import com.google.gson.JsonParser;

import java.util.HashMap;
import java.util.Map;

public class MainActivity extends AppCompatActivity {
    TextView tv;
    Button bt;
    EditText et;
    String no1, no2, no3, no4, no5, no6, bonus, drwNo;
    JsonObject jsonObject;
    RequestQueue requestQueue;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        tv = findViewById(R.id.tv);
        et = findViewById(R.id.et);
        bt = findViewById(R.id.bt);

        bt.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                requestLotto();
            }
        });

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


    }

    public void requestLotto(){
        drwNo = et.getText().toString();
        if(drwNo.equals("")){
            Toast.makeText(this, "회차 번호를 입력하세요", Toast.LENGTH_SHORT).show();
            return;
        }

        String url = "https://www.dhlottery.co.kr/common.do?method=getLottoNumber&drwNo=" + drwNo;
        StringRequest request = new StringRequest(Request.Method.GET, url, new Response.Listener<String>() {
            @Override
            public void onResponse(String response) {
                jsonObject = (JsonObject) JsonParser.parseString(response);
                no1 = "당첨번호 1 - " + jsonObject.get("drwtNo1");
                no2 = "당첨번호 2 - " + jsonObject.get("drwtNo2");
                no3 = "당첨번호 3 - " + jsonObject.get("drwtNo3");
                no4 = "당첨번호 4 - " + jsonObject.get("drwtNo4");
                no5 = "당첨번호 5 - " + jsonObject.get("drwtNo5");
                no6 = "당첨번호 6 - " + jsonObject.get("drwtNo6");
                bonus = "보너스 - " + jsonObject.get("bnusNo");
                tv.setText(drwNo + "회차 당첨번호\n\n" + no1 + "\n" + no2 + "\n" + no3 + "\n" + no4
                        + "\n" + no5 + "\n" + no6 + "\n" + bonus);
            }
        }, new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError error) {

            }
        }){
            @Override
            protected Map<String, String> getParams() throws AuthFailureError {
                Map<String,String> params = new HashMap<>();
                return params;
            }
        };
        request.setShouldCache(false);
        requestQueue.add(request);
    }

}

 

Volley, StringRequest를 이용해서 url에 접속해서 데이터를 받아오는 방식입니다.

 

onResponse(String response) 함수가 응답을 받아왔을 경우 호출됩니다.

 

응답을 받아온 String값을 JsonParser를 이용해서 JsonObject로 파싱 해주고 원하는 값들은 지정해둔 변수에 저장해주고 값을 띄워줬습니다.

 

예를 들어서 861회 차를 검색한다고 했을 때

 

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

 

상단 url로 조회를 해보시면 아래와 같이 값을 받아 올 수 있습니다.

 

{"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}

 

위 값을 JsonObject를 이용하면 원하는 값만 추출해서 사용하실 수 있습니다.

 

ex)

no1 = "당첨번호 1 - " + jsonObject.get("drwtNo1");

결과값 = 당첨번호 1 - 

 

데이터별 결과값

totSellamnt - 누적 상금

firstWinamnt - 1등 당첨자 1인당 당첨 금액

firstPrzwnerCo - 1등 당첨자 수

firstAccumamnt - 1등 당첨 총금액

drwNoDate - 당첨 날짜

drwNo - 당첨 회차

drwtNo1 - 첫 번째 당첨번호

drwtNo2 - 두 번째 당첨번호

drwtNo3 - 세 번째 당첨번호

drwtNo4

drwtNo5

drwtNo6

 

반응형