retrofit,http,android json라이브러리 파싱
https://brunch.co.kr/@henen/25
강의의 코드에 이어서 시작하겠습니다.
public interface ApiService {
public static final String API_URL = "http://jsonplaceholder.typicode.com/";
@GET("comments")
Call<ResponseBody> getComment(@Query("postId") int postId);
@POST("comments")
Call<ResponseBody>getPostComment(@Query("postId") int postId);
//String version
@GET("comments")
Call<ResponseBody> getCommentStr(@Query("postId") String postId);
@FormUrlEncoded
@POST("comments")
Call<ResponseBody>getPostCommentStr(@Field("postId") int postId);
}
public class MainActivity extends AppCompatActivity {
Retrofit retrofit;
ApiService apiService;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
retrofit = new Retrofit.Builder().baseUrl(ApiService.API_URL).build();
apiService = retrofit.create(ApiService.class);
//get
Call<ResponseBody> comment = apiService.getComment(1);
comment.enqueue(new Callback<ResponseBody>() {
@Override
public void onResponse(Call<ResponseBody> call, Response<ResponseBody> response) {
try {
Log.v("Test", response.body().string());
} catch (IOException e) {
e.printStackTrace();
}
}
@Override
public void onFailure(Call<ResponseBody> call, Throwable t) {
}
});
}
}
코드를 실행시켜 로그를 확인하면
[
{
"postId": 1,
"id": 1,
"name": "id labore ex et quam laborum",
"email": "Eliseo@gardner.biz",
"body": "laudantium enim quasi est quidem magnam voluptate ipsam eos\ntempora quo necessitatibus\ndolor quam autem quasi\nreiciendis et nam sapiente accusantium"
},
{
"postId": 1,
"id": 2,
"name": "quo vero reiciendis velit similique earum",
"email": "Jayne_Kuhic@sydney.com",
"body": "est natus enim nihil est dolore omnis voluptatem numquam\net omnis occaecati quod ullam at\nvoluptatem error expedita pariatur\nnihil sint nostrum voluptatem reiciendis et"
},
{
"postId": 1,
"id": 3,
"name": "odio adipisci rerum aut animi",
"email": "Nikita@garfield.biz",
"body": "quia molestiae reprehenderit quasi aspernatur\naut expedita occaecati aliquam eveniet laudantium\nomnis quibusdam delectus saepe quia accusamus maiores nam est\ncum et ducimus et vero voluptates excepturi deleniti ratione"
},
{
"postId": 1,
"id": 4,
"name": "alias odio sit",
"email": "Lew@alysha.tv",
"body": "non et atque\noccaecati deserunt quas accusantium unde odit nobis qui voluptatem\nquia voluptas consequuntur itaque dolor\net qui rerum deleniti ut occaecati"
},
{
"postId": 1,
"id": 5,
"name": "vero eaque aliquid doloribus et culpa",
"email": "Hayden@althea.biz",
"body": "harum non quasi et ratione\ntempore iure ex voluptates in ratione\nharum architecto fugit inventore cupiditate\nvoluptates magni quo et"
}
]
다음의 결과가 나옵니다.
이 결과를 JSON Viewer 프로그램이나, 사이트의 뷰어로 확인하면 구조를 쉽게 확인할수 있습니다.
구글에서 jsonViewer로 검색시 제일 처음나오는
http://jsonviewer.stack.hu/
를 이용해 확인해보겠습니다.
Text에 Json 내용을 입력하고
상단의 Viewer 메뉴를 클릭하면 정상적인 JSON 형식일 때 형식을 분석해줍니다.
[] 은 JSON Array(배열)
{}은 JSON Object(객체)입니다.
JSON ARRAY안에 4개의 JSON Object가 있고 JSON Object는 postID,id,name,email,body를 가지고 있는 구조를 확인할수있습니다.
그럼 이제 구조를 확인했으니 안드로이드에서 제공하는 JSON 객체로 읽어보겠습니다.
코드를 먼저 확인해보겠습니다.
try {
String result = response.body().string();
//처음에 배열이므로
Log.v("Test", result);
try {
JSONArray jsonArray = new JSONArray(result);
int postId;
int id;
String name;
String mail;
String body;
for(int i = 0 ; i<jsonArray.length();i++){
//배열이므로 0 번을 가져와보자
JSONObject jsonObject = jsonArray.getJSONObject(i);
postId = jsonObject.getInt("postId");
id = jsonObject.getInt("id");
name = jsonObject.getString("name");
mail = jsonObject.getString("email");
body = jsonObject.getString("body");
Log.v("Test",jsonObject.toString());
}
} catch (JSONException e) {
e.printStackTrace();
}
설명 :
retrofit으로 받아온 json 형식의 string을
JSONARRAY 객체에 넣어줍니다.
JSONArray jsonArray = new JSONArray(result);
jsonArray.length()를 통하여 jsonArray에 몇개의 Object가 있는지 확인할수있습니다.
JsonObject안의 값을 꺼낼려면 정수형이면 getInt() ,실수형이면 getDouble(),문자면 getString() 을 이용하여 꺼낼수있습니다
postId = jsonObject.getInt("postId");
id = jsonObject.getInt("id");
name = jsonObject.getString("name");
mail = jsonObject.getString("email");
body = jsonObject.getString("body");
또한 JsonObject.toString()을 통하여 쉽게 Object의 내용을 확인할수 있습니다.
다음 강의에서는 retrofit과 Gson을 이용하여 더욱 쉽게 JSON 객체를 만들어 보도록 하겠습니다.