로또 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
'안드로이드 > 코드' 카테고리의 다른 글
[안드로이드] 앱 내부에서 언어 설정 변경하기 (feat.Spinner) (1) | 2020.01.04 |
---|---|
[안드로이드] 위험 권한 요청후 갤러리 사진 가져오기 (0) | 2020.01.03 |
[안드로이드] 위험 권한 요청, 확인 하기 (0) | 2019.12.27 |
[안드로이드] 페이지 슬라이딩 애니메이션 사용하기 - AnimationListener, Animation, Animation (0) | 2019.12.26 |
[안드로이드] 상단 알림창에 알림 띄우기 2 (이벤트 추가) - Notification, Intent, PendingIntent (0) | 2019.12.24 |