[Volley][Java]volley로 json데이터받기(3)

2019. 6. 26. 01:42·IT기술 관련/모바일
반응형

출처:https://kamang-it.tistory.com/entry/VolleyJavavolley%EB%A1%9C-json%EB%8D%B0%EC%9D%B4%ED%84%B0%EB%B0%9B%EA%B8%B03

 

 

참고:

[Volley][Java]Android Volley 기본과 get으로 주고받기(1)

[Volley][Java]volley로 post로 주고받기(2)

 

volley로 json데이터를 주고받아보도록하자.

설정의 설명은 생략할테니 참고부분을 참고하라.

 

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="net.theceres.myapplication">

<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">
<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" />
</manifest>

manifest설정이다.

 

액티비티의 모습이다.

 

서버에서 제공하는 해당 url은 위와 같다.

그럼 해당 json데이터를 받아보도록 하자.

 

package net.theceres.myapplication;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;

import com.android.volley.AuthFailureError;
import com.android.volley.NetworkResponse;
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.JsonObjectRequest;
import com.android.volley.toolbox.JsonRequest;
import com.android.volley.toolbox.StringRequest;
import com.android.volley.toolbox.Volley;

import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

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

public class MainActivity extends AppCompatActivity {

private static final String TAG = "MAIN";
private TextView tv;
private RequestQueue queue;

private String id;
private String pw;
private JSONArray language;
private JSONObject item;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
tv = findViewById(R.id.tvMain);

queue = Volley.newRequestQueue(this);
String url = "http://192.168.0.9:5000/";

final JsonObjectRequest jsonRequest = new JsonObjectRequest(Request.Method.GET, url, null, new Response.Listener<JSONObject>() {
@Override
public void onResponse(JSONObject response) {
try {
id = response.getString("id");
pw = response.getString("pw");
language = response.getJSONArray("language");
item = response.getJSONObject("item");
tv.setText(id + ":" + pw + ":" + language + ":" + item);
} catch (JSONException e) {
e.printStackTrace();
}
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {

}
});

jsonRequest.setTag(TAG);
queue.add(jsonRequest);
}

@Override
protected void onStop() {
super.onStop();
if (queue != null) {
queue.cancelAll(TAG);
}
}
}

url은 여러분의 url로 해라.

위와 같이 사용하면 json데이터를 받을 수있다.

여기서 우리는 StringRequest가 아니라 JsonObjectRequest라는 조금 다른 request를 사용하였다.

받는 변수의 타입은 해당 타입과 맞추어준다.

위의 예제에서 json object와 json array를 받는 예제를 볼 수 있다.

 

보다시피 해당 값을 받을 수 있다.

 

하지만 해당 솔루션은 문제가 있다.

바로 넘어오는 타입이 Json Array인지, Json Object인지, null인지 알수 없다는 것이다.

즉 보내는 쪽에서 보내는 타입을 신경써야 한다는 소리이다.

사실 이게 크게 문제는 안 될수 있지만 사용하기 조금 껄끄럽다.

이 문제점을 해결하고 싶다면 구글에서 제공하는 gson을 사용하는게 좋다.

gson을 사용하는 예제를 보도록하자.

 

gson은 mvn레포지터리에 존재한다.

 

해당 의존성을 복사해서 넣어준다.

 

dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation 'com.android.support:appcompat-v7:27.1.1'
implementation 'com.android.support.constraint:constraint-layout:1.1.1'
testImplementation 'junit:junit:4.12'
androidTestImplementation 'com.android.support.test:runner:1.0.2'
androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'

// https://mvnrepository.com/artifact/com.android.volley/volley
compile group: 'com.android.volley', name: 'volley', version: '1.0.0'
compile group: 'com.google.code.gson', name: 'gson', version: '2.8.5'
}

이렇게 넣어주면 된다.

 

package net.theceres.myapplication;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;

import com.android.volley.AuthFailureError;
import com.android.volley.NetworkResponse;
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.JsonObjectRequest;
import com.android.volley.toolbox.JsonRequest;
import com.android.volley.toolbox.StringRequest;
import com.android.volley.toolbox.Volley;
import com.google.gson.JsonElement;
import com.google.gson.JsonObject;
import com.google.gson.JsonParser;

import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

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

public class MainActivity extends AppCompatActivity {

private static final String TAG = "MAIN";
private TextView tv;
private RequestQueue queue;

private String id;
private String pw;
private JSONArray language;
private JSONObject item;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
tv = findViewById(R.id.tvMain);

queue = Volley.newRequestQueue(this);
String url = "http://192.168.0.9:5000/";

StringRequest stringRequest = new StringRequest(Request.Method.GET, url, new Response.Listener<String>() {
@Override
public void onResponse(String response) {
JsonParser jsonParser = new JsonParser();
JsonElement jsonElement = jsonParser.parse(response);
tv.setText(jsonElement + "\n");
tv.setText(tv.getText() + jsonElement.getClass().getName() + "\n");
tv.setText(tv.getText() + ((JsonObject) jsonElement).get("language").getClass().getName() + "\n");
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {

}
});

stringRequest.setTag(TAG);
queue.add(stringRequest);
}

@Override
protected void onStop() {
super.onStop();
if (queue != null) {
queue.cancelAll(TAG);
}
}
}

 

여기서는 json request가 아닌 string request를 사용한다.

row하게 문자열로 받아서 json parser로 json화 시킨다.

gson은 json의 개념을 추상화한 json element가 존재한다.

그리고 jsonElement의 타입을 확인해서 Array면 JsonArray로 사용하고 Object면 JsonObject로 사용한다.

또한 get으로 자식 엘레멘트를 가져올 수 있다.

 

결과를 확인해보자.

gson이 훨씬 유동적이게 사용할 수 있음을 확인할 수 있다.

 

 

 

반응형

'IT기술 관련 > 모바일' 카테고리의 다른 글

[Android] 클릭 이벤트 강제 발생 시키기 -performclick  (0) 2019.08.08
kotlin 으로 json array response 처리하는 방법  (0) 2019.06.26
[안드로이드] extends Fragment 구현시 context 구하는 방법  (0) 2019.06.26
안드로이드 WIfiManager 로 주변 wifi 스캔하기! Android WifiManager scan access point wifi list  (0) 2019.06.14
android kotlin - WebView example -안드로이드 코틀린 웹뷰  (0) 2019.06.14
'IT기술 관련/모바일' 카테고리의 다른 글
  • [Android] 클릭 이벤트 강제 발생 시키기 -performclick
  • kotlin 으로 json array response 처리하는 방법
  • [안드로이드] extends Fragment 구현시 context 구하는 방법
  • 안드로이드 WIfiManager 로 주변 wifi 스캔하기! Android WifiManager scan access point wifi list
호레
호레
창업 / IT / 육아 / 일상 / 여행
    반응형
  • 호레
    Unique Life
    호레
  • 전체
    오늘
    어제
    • 분류 전체보기
      • 법률
        • 기본
        • 개인정보보호법
        • 정보통신망법
        • 전자금융거래법
        • 전자금융감독규정
        • 신용정보법
        • 온라인투자연계금융업법
      • 창업
        • 외식업 관련
        • 임대업 관련
        • 유통업 관련
        • 세무 관련
        • 마케팅 관련
        • 기타 지식
        • 트렌드
        • Youtube
      • IT기술 관련
        • 모바일
        • 윈도우
        • 리눅스
        • MAC OS
        • 네트워크
        • 빅데이터 관련
        • A.I 인공지능
        • 파이썬_루비 등 언어
        • 쿠버네티스
        • 기타 기술
      • 퍼블릭 클라우드 관련
        • Azure
        • GCP
        • AWS
      • 정보보안 관련
        • QRadar
        • Splunk
        • System
        • Web
      • 기타
        • 세상 모든 정보
        • 서적
      • 게임 관련
        • 유니티
      • 부동산
      • 맛집 찾기
        • 강남역
        • 양재역
        • 판교역
        • ★★★★★
        • ★★★★
        • ★★★
        • ★★
        • ★
      • 결혼_육아 생활
        • 리얼후기
        • 일상
        • 육아
        • 사랑
        • Food
      • 영어
        • 스피킹
        • 문법
        • 팝송
        • 영화
      • K-컨텐츠
        • 드라마
        • 영화
        • 예능
      • 독서
      • 프로젝트 관련 조사
        • 시스템 구축
        • 로그 관련
        • 웹
        • APT
        • 모의 해킹
        • DB
        • 허니팟
        • 수리카타
        • 알고리즘
        • FDS
      • 기업별 구내 식당 평가
        • 한국관광공사
        • KT telecop
        • KT M&S
        • KT powertel
        • KT cs 연수원
        • 진에어
      • 대학 생활
        • 위드윈연구소
        • 진로 고민
        • 채용정보
        • 자동차
        • 주식
        • 악성코드
        • 게임 보안
      • 쉐어하우스
  • 블로그 메뉴

    • 홈
    • 게임 관련
    • IT 기술 관련
    • 태그
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    무역전쟁
    쥬쥬랜드
    복리후생
    보안가이드
    유니티
    돈까스
    판교맛집
    수제버거
    상호관세
    판교역
    런치
    판교
    수제버거존맛
    점심
    AWS
    맛집
    대통령
    마케팅
    수제버거맛집
    이재곧죽습니다
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.0
호레
[Volley][Java]volley로 json데이터받기(3)

개인정보

  • 티스토리 홈
  • 포럼
  • 로그인
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.