-
[안드로이드] Retrofit GET 방식 간단 예제 2안드로이드(java)/기능 관련 2019. 11. 14. 22:30
GET 방식 예제에서는 query string을 요청하지 않고 그냥 통으로 다 요청했었습니다. 그래서 posts의 모든 내용을 받아와서 화면에 출력해 주었었죠.
이번에는 통으로 요청이 아니라 원하는 userId 를 지정해서 그 값만 받아 오도록 하겠습니다.
아래의 내용처럼 전체 내용 중 userId 4 에 대한 것만 받아오는 것이죠.
[받아올 내용]
[ { "userId": 4, "id": 31, "title": "ullam ut quidem id aut vel consequuntur", "body": "debitis eius sed quibusdam non quis consectetur vitae\nimpedit ut qui consequatur sed aut in\nquidem sit nostrum et maiores adipisci atque\nquaerat voluptatem adipisci repudiandae" }, { "userId": 4, "id": 32, "title": "doloremque illum aliquid sunt", "body": "deserunt eos nobis asperiores et hic\nest debitis repellat molestiae optio\nnihil ratione ut eos beatae quibusdam distinctio maiores\nearum voluptates et aut adipisci ea maiores voluptas maxime" }, { "userId": 4, "id": 33, "title": "qui explicabo molestiae dolorem", "body": "rerum ut et numquam laborum odit est sit\nid qui sint in\nquasi tenetur tempore aperiam et quaerat qui in\nrerum officiis sequi cumque quod" }, { "userId": 4, "id": 34, "title": "magnam ut rerum iure", "body": "ea velit perferendis earum ut voluptatem voluptate itaque iusto\ntotam pariatur in\nnemo voluptatem voluptatem autem magni tempora minima in\nest distinctio qui assumenda accusamus dignissimos officia nesciunt nobis" }, { "userId": 4, "id": 35, "title": "id nihil consequatur molestias animi provident", "body": "nisi error delectus possimus ut eligendi vitae\nplaceat eos harum cupiditate facilis reprehenderit voluptatem beatae\nmodi ducimus quo illum voluptas eligendi\net nobis quia fugit" }, { "userId": 4, "id": 36, "title": "fuga nam accusamus voluptas reiciendis itaque", "body": "ad mollitia et omnis minus architecto odit\nvoluptas doloremque maxime aut non ipsa qui alias veniam\nblanditiis culpa aut quia nihil cumque facere et occaecati\nqui aspernatur quia eaque ut aperiam inventore" }, { "userId": 4, "id": 37, "title": "provident vel ut sit ratione est", "body": "debitis et eaque non officia sed nesciunt pariatur vel\nvoluptatem iste vero et ea\nnumquam aut expedita ipsum nulla in\nvoluptates omnis consequatur aut enim officiis in quam qui" }, { "userId": 4, "id": 38, "title": "explicabo et eos deleniti nostrum ab id repellendus", "body": "animi esse sit aut sit nesciunt assumenda eum voluptas\nquia voluptatibus provident quia necessitatibus ea\nrerum repudiandae quia voluptatem delectus fugit aut id quia\nratione optio eos iusto veniam iure" }, { "userId": 4, "id": 39, "title": "eos dolorem iste accusantium est eaque quam", "body": "corporis rerum ducimus vel eum accusantium\nmaxime aspernatur a porro possimus iste omnis\nest in deleniti asperiores fuga aut\nvoluptas sapiente vel dolore minus voluptatem incidunt ex" }, { "userId": 4, "id": 40, "title": "enim quo cumque", "body": "ut voluptatum aliquid illo tenetur nemo sequi quo facilis\nipsum rem optio mollitia quas\nvoluptatem eum voluptas qui\nunde omnis voluptatem iure quasi maxime voluptas nam" } ]
[완성 소스 github 주소] https://github.com/dailyshow/retrofitGet2
이전에 했던 Retrofit Get방식 간단 예제1 의 내용을 토대로 진행하겠습니다.
Retrofit get 방식 간단 예제1 게시물을 보시려면 여기를 눌러주세요.
userId를 이용해서 자료를 출력 하려고 합니다. 해당 내용만 출력하기 위해서는
JsonPlaceHolderApi 에 @GET("posts"), @Query("userId") int userId 를 추가해줍니다.
"posts"는 주소의 경로입니다.
"userId" 는 API URL query string 입니다
가져오려는 URL 경로는 http://jsonplaceholder.typicode.com/posts?userId=4 이렇게 생겼습니다.
<JsonPlaceHolderApi.java>
1234public interface JsonPlaceHolderApi {@GET("posts")Call<List<Post>> getPost(@Query("userId") int userId);}cs <MainActivity.java>
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354public class MainActivity extends AppCompatActivity {private final String BASEURL = "http://jsonplaceholder.typicode.com/";private TextView textViewResult;private JsonPlaceHolderApi jsonPlaceHolderApi;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);textViewResult = findViewById(R.id.text_view_result);Retrofit retrofit = new Retrofit.Builder().baseUrl(BASEURL).addConverterFactory(GsonConverterFactory.create()).build();jsonPlaceHolderApi = retrofit.create(JsonPlaceHolderApi.class);getPosts();}private void getPosts() {Call<List<Post>> call = jsonPlaceHolderApi.getPost(4);call.enqueue(new Callback<List<Post>>() {@Overridepublic void onResponse(Call<List<Post>> call, Response<List<Post>> response) {if (!response.isSuccessful()) {textViewResult.setText("code: " + response.code());return;}List<Post> posts = response.body();for (Post post : posts) {String content = "";content += "ID: " + post.getId() + "\n";content += "User ID: " + post.getUserId() + "\n";content += "Title: " + post.getTitle() + "\n";content += "Text: " + post.getText() + "\n";textViewResult.append(content);}}@Overridepublic void onFailure(Call<List<Post>> call, Throwable t) {textViewResult.setText(t.getMessage());}});}}cs 이렇게 하면 userId 가 4 인 항목만 받아와서 출력하게 됩니다.
<결과 화면>
잘 받아와 지는것 같습니다.
이번에는 지금 나온것을 조금 가공하여 id 를 기준으로 내림 차순 정렬로 출력해 보도록 하겠습니다.
<JsonPlaceHolderApi.java>
12@GET("posts")Call<List<Post>> getPost(@Query("userId") int userId, @Query("_sort") String sort, @Query("_order") String desc);cs <MainActivity.java>
12345678910111213141516171819202122232425262728293031private void getPosts() {Call<List<Post>> call = jsonPlaceHolderApi.getPost(4, "id", "desc");call.enqueue(new Callback<List<Post>>() {@Overridepublic void onResponse(Call<List<Post>> call, Response<List<Post>> response) {if (!response.isSuccessful()) {textViewResult.setText("code: " + response.code());return;}List<Post> posts = response.body();for (Post post : posts) {String content = "";content += "ID: " + post.getId() + "\n";content += "User ID: " + post.getUserId() + "\n";content += "Title: " + post.getTitle() + "\n";content += "Text: " + post.getText() + "\n";content += "\n";textViewResult.append(content);}}@Overridepublic void onFailure(Call<List<Post>> call, Throwable t) {textViewResult.setText(t.getMessage());}});}cs mainActivity 에서 jsonPlaceHolderApi getPost() 에서 추가해준 인자값을 추가해주었습니다.
jsonPlaceHolderApi.getPost(4, "id", "desc");
이렇게 입력 하시고 다시 실행 해보시면 아까와는 id 값이 반대로 출력 되는것을 확인하실 수 있습니다.
그리고 이렇게 userId 하나만 검색 하는것이 아니라 여러개도 같이 요청할 수 있습니다.
JsonPlaceHolderApi 내용을 수정해 주도록 하겠습니다.
<JsonPlaceHolderApi.java>
12@GET("posts")Call<List<Post>> getPost(@Query("userId") int userId, @Query("userId") int userId2, @Query("userId") int userId3);cs 이렇게 여러개를 더 넣어주시면 됩니다.
그리고 mainActivity에서 파라미터 값만 변경해 주시면 되겠죠.
<MainActivity.java>
12345678910111213141516171819202122232425262728293031private void getPosts() {Call<List<Post>> call = jsonPlaceHolderApi.getPost(1,3,7);call.enqueue(new Callback<List<Post>>() {@Overridepublic void onResponse(Call<List<Post>> call, Response<List<Post>> response) {if (!response.isSuccessful()) {textViewResult.setText("code: " + response.code());return;}List<Post> posts = response.body();for (Post post : posts) {String content = "";content += "ID: " + post.getId() + "\n";content += "User ID: " + post.getUserId() + "\n";content += "Title: " + post.getTitle() + "\n";content += "Text: " + post.getText() + "\n";content += "\n";textViewResult.append(content);}}@Overridepublic void onFailure(Call<List<Post>> call, Throwable t) {textViewResult.setText(t.getMessage());}});}cs jsonPlaceHolderApi.getPost(1,3,7) 를 지정해서 userId 1 번 3번 7번을 지정하였습니다.
<실행 결과>
위에처럼 userId 를 여러개 지정해줘도
되지만 배열을 이용한 방법을 사용하셔도 동일한 결과를 나타낼 수 있습니다.
<JsonPlaceHolderApi.java>
12@GET("posts")Call<List<Post>> getPost(@Query("userId") Integer[] userId);cs <MainActivity.java>
12345678910111213141516171819202122232425262728293031private void getPosts() {Call<List<Post>> call = jsonPlaceHolderApi.getPost(new Integer[]{3,6,9});call.enqueue(new Callback<List<Post>>() {@Overridepublic void onResponse(Call<List<Post>> call, Response<List<Post>> response) {if (!response.isSuccessful()) {textViewResult.setText("code: " + response.code());return;}List<Post> posts = response.body();for (Post post : posts) {String content = "";content += "ID: " + post.getId() + "\n";content += "User ID: " + post.getUserId() + "\n";content += "Title: " + post.getTitle() + "\n";content += "Text: " + post.getText() + "\n";content += "\n";textViewResult.append(content);}}@Overridepublic void onFailure(Call<List<Post>> call, Throwable t) {textViewResult.setText(t.getMessage());}});}cs jsonPlaceHolderApi.getPost(new Integer[]{3,6,9}); 이렇게 하시면 3번 6번 9번 userId를 가진 내용물만 출력 됩니다.
<결과 화면>
이번에는 Map<> 을 이용한 방식을 확인해 보겠습니다.
<JsonPlaceHolderApi.java>
12@GET("posts")Call<List<Post>> getPost(@QueryMap Map<String, String> parameter);cs <MainActivity.java>
123456789101112131415161718192021222324252627282930313233343536private void getPosts() {Map<String, String> map = new HashMap<>();map.put("userId", "5");map.put("_sort", "id");map.put("_order", "desc");Call<List<Post>> call = jsonPlaceHolderApi.getPost(map);call.enqueue(new Callback<List<Post>>() {@Overridepublic void onResponse(Call<List<Post>> call, Response<List<Post>> response) {if (!response.isSuccessful()) {textViewResult.setText("code: " + response.code());return;}List<Post> posts = response.body();for (Post post : posts) {String content = "";content += "ID: " + post.getId() + "\n";content += "User ID: " + post.getUserId() + "\n";content += "Title: " + post.getTitle() + "\n";content += "Text: " + post.getText() + "\n";content += "\n";textViewResult.append(content);}}@Overridepublic void onFailure(Call<List<Post>> call, Throwable t) {textViewResult.setText(t.getMessage());}});}cs map을 하나 생성해 줍니다. 그리고 put으로 query string으로 들어갈 내용들을 담아줍니다.
Map<String, String> map = new HashMap<>();
map.put("userId", "5");
map.put("_sort", "id");
map.put("_order", "desc");
getPost()에 map 을 넣어줍니다.
jsonPlaceHolderApi.getPost(map);
이렇게 하시면 Map 을 이용한 방식 완료입니다.
<결과 화면>
'안드로이드(java) > 기능 관련' 카테고리의 다른 글
[안드로이드] Retrofit PUT, DELETE 방식 간단 예제 (2) 2019.11.28 [안드로이드] Retrofit POST 방식 간단 예제 (0) 2019.11.19 [안드로이드] Retrofit GET 방식 간단 예제1 (0) 2019.11.14 [안드로이드] FCM 메시지 전송 될 때 진동 되지 않는 증상. (0) 2019.04.03 [안드로이드] ListView 사용하기 (0) 2019.01.30