이번 시간에는 Volley 라이브러리를 이용해서 JSONObject 형태로 호출하고 응답받아서 데이터를 파싱 하는 방법을 알아보겠습니다.
AndroidManifest.xml
manifest 태그 안에 추가
<uses-permission android:name="android.permission.INTERNET" />
application 태그안에 아래 코드 추가(Http 호출 허용)
android:usesCleartextTraffic="true"
build.gradle(Module:프로젝트명:app)
dependencies 괄호 안에 아래 코드를 넣어주시면 됩니다.
implementation 'com.android.volley:volley:1.2.1'
- 설명 -
1. 첫 번째 텍스트뷰는 원본데이터를 보여줍니다.
2. 두 번째 텍스트뷰는 원본데이터를 파싱 해서 보여줍니다.
3. 버튼을 누르면 api호출해서 데이터를 가져옵니다.
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 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"
android:orientation="vertical">
<TextView
android:id="@+id/text_original"
android:layout_width="match_parent"
android:layout_height="150dp"
android:background="@android:color/holo_green_dark"
android:textSize="15sp" />
<TextView
android:id="@+id/text_parse"
android:layout_width="match_parent"
android:layout_height="250dp"
android:layout_marginTop="20dp"
android:background="@android:color/holo_blue_dark"
android:textSize="15sp" />
<Button
android:id="@+id/send_btn"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="20dp"
android:text="Send"
android:textSize="20sp" />
</LinearLayout>
- 설명 -
1. JsonObjectRequest jsonObjectRequest = new JsonObjectRequest
JSONObject타입으로 호출해서 JsonObject타입으로 전달받습니다.
2. parseData(response);
전달받은 데이터를 파싱처리할 메서드에 매개변수로 전달합니다.
3. object.getJSONObject("data");
return받을 데이터 타입이 JSONObject, key값은 data입니다.
4. object.getString("status");
return받을 데이터 타입이 String, key값은 status입니다.
5. Iterator iterator = data.keys();
전체 key값을 변수에 담습니다.
6. data.getString(key);
key값을 통해 데이터를 꺼내옵니다.
public class MainActivity extends AppCompatActivity {
//선언
RequestQueue queue;
TextView textOri, textParse;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
textOri = findViewById(R.id.text_original);
textParse = findViewById(R.id.text_parse);
Button sendBtn = findViewById(R.id.send_btn);
//초기화(null이면 값을 초기화)
if(queue == null) {
queue = Volley.newRequestQueue(this);
}
String url = "https://api.bithumb.com/public/ticker/ETC_KRW";
//JSON형태로 호출 및 응답 받기
JsonObjectRequest jsonObjectRequest = new JsonObjectRequest(Request.Method.GET,
url, null, new Response.Listener<JSONObject>() {
@Override
public void onResponse(JSONObject response) {
//응답받은 JSONObject에서 데이터 꺼내오기
parseData(response);
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
//오류 발생 시 실행
Toast.makeText(MainActivity.this, "error: " + error.toString()
, Toast.LENGTH_SHORT).show();
}
});
//버튼 이벤트
sendBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
queue.add(jsonObjectRequest);
}
});
}//onCreate
/**
* 데이터 꺼내오기
* @param object 원본데이터
*/
private void parseData(JSONObject object) {
//상태값
String status = "";
//원본 텍스트뷰에 담기
textOri.setText(object.toString());
//키값 리스트
ArrayList<String> keyList = new ArrayList<>();
try {
//data 담기
JSONObject data = object.getJSONObject("data");
//status 담기
status = object.getString("status");
//data안의 전체 키값 담기
Iterator iterator = data.keys();
//반복문을 통해 list에 키값 담기
while(iterator.hasNext()){
String s = iterator.next().toString();
keyList.add(s);
//파싱 텍스트뷰에 담기
textParse.append("status: " + status + "\n");
//data안의 키값으로 데이터 꺼내오기
for(int i = 0; i < keyList.size(); i++){
//키값 변수에 담기
String key = keyList.get(i).toString();
//키값을 통해 데이터 꺼내오기
String value = data.getString(key);
//파싱 텍스트뷰에 담기
textParse.append(key + ": " + value + "\n");
}
}
}catch(JSONException e){
e.printStackTrace();
}
}
}//MainActivity
2022.04.29 - [안드로이드] - [안드로이드] LineChart 만드는 방법 part1 - 기본 구현
2022.03.02 - [안드로이드] - [안드로이드] SQLite RecyclerView 연락처 만드는 방법 part1 - 조회
2022.02.18 - [안드로이드] - [안드로이드] 사각형(Rectangle), 원형(Oval), 선(Line) 모양 쉽게 만드는 방법 - Drawable.xml
[안드로이드] DataBinding 컴포넌트 쉽게 접근하는 방법 (0) | 2022.05.10 |
---|---|
[안드로이드] HTTP 통신 Volley 사용법 part3 - Image 요청 및 응답 (0) | 2022.05.09 |
[안드로이드] HTTP 통신 Volley 사용법 part1 - 간단한 요청 및 응답 (0) | 2022.05.07 |
[안드로이드] BarChart 만드는 방법 part2 - 멀티 데이터 구현 (0) | 2022.05.06 |
[안드로이드] BarChart 만드는 방법 part1 - 기본 구현 (0) | 2022.05.05 |
댓글 영역