안드로이드 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>
'IT 개발 > Android' 카테고리의 다른 글
[안드로이드] ScalableLayout - 모든 해상도를 한번에 표현하기 (0) | 2021.02.06 |
---|---|
[안드로이드] Fragment간 데이터 주고받기 (Interface 사용) (0) | 2020.06.17 |
[안드로이드] 데이터 저장하기 - SQLite Database사용법 (0) | 2020.05.19 |
[안드로이드] Fragment간 데이터 주고받기 (ViewModel 사용) (0) | 2020.05.12 |
[안드로이드] TabLayout과 ViewPager (Material Design) (1) | 2020.04.19 |