retrofit2のサンプル


retrofitというのはREST URLのモデリングをするパッケージというイメージです。

対象のデータ1

```
http://127.0.0.1:3000/api/users/1
```

```json
{"id":1,
 "email":"test1@gmail.com",
 "teacher_limit":30,
 "teacher_count":5, 
 "created_at":"2017-01-15T01:43:38.270+09:00",
 "updated_at":"2017-01-15T01:43:38.270+09:00"
}
```

対象のデータ2

```
http://127.0.0.1:3000/api/users
```

```json
{"user":[
  {"id":1,
   "email":"test1@gmail.com",
   "teacher_limit":30,"teacher_count":5,
   "created_at":"2017-01-15T01:43:38.270+09:00",
   "updated_at":"2017-01-15T01:43:38.270+09:00"},
  {"id":2,"email":"test2@yahoo.com",
   "teacher_limit":40,"teacher_count":7,
   "created_at":"2017-01-15T01:44:09.086+09:00",
   "updated_at":"2017-01-15T01:44:09.086+09:00"}
  ]
}
```


データ1用のクラス

```java:User.java
public class User {
    public String id;
    public String email;
    public Integer teacher_limit;
    public Integer teacher_count;

    public Integer getTeacher_count() {
        return teacher_count;
    }

    public String getId() {
        return id;
    }


    public String getEmail() {
        return email;
    }

    public Integer getTeacher_limit() {
        return teacher_limit;
    }
}
```

データ2用のクラス
Jsonのkey名"user"と"public List<User> user"を合わせる必要がある。

```java:ListUser.java
public class ListUser {
    public List<User> user;

    public List<User> getListUsers() {
        return user;
    }
}
```

```java:ApiService.java
import retrofit2.Call;
import retrofit2.http.GET;
import retrofit2.http.Path;

public interface ApiService {
    @GET("api/users/{id}")
    Call<User> getUser(@Path("id") int userId);

    @GET("api/users")
    Call<ListUser> listUsers();
}
```

対象のサーバーはlocalで、PCのブラウザから見る時はこういうURLに

```
http://127.0.0.1:3000/api/users/1
```

ただ、Androidから見たPCのIPは違うので、ifconfigなので確認が必要。
なので、baseUrlには、このIPを設定しました。注意が必要。

```
http://192.168.43.134:3000/
```


```java:MainActivity

import java.util.List;

import retrofit2.Call;
import retrofit2.Callback;
import retrofit2.Response;
import retrofit2.Retrofit;
import retrofit2.converter.gson.GsonConverterFactory;

    private void showMember(){
        Retrofit retrofit = new Retrofit.Builder()
                .baseUrl("http://192.168.43.134:3000/")
                .addConverterFactory(GsonConverterFactory.create())
                .build();
        ApiService service = retrofit.create(ApiService.class);
        Call<User> call = service.getUser(1);
        call.enqueue(new Callback<User>() {
            @Override
            public void onResponse(Call<User> call, Response<User> response) {
                Log.d("debug1", response.body().getEmail());
            }

            @Override
            public void onFailure(Call<User> call, Throwable t) {
                Log.d("debug2", t.getMessage());
            }
        });


        Call<ListUser> call2 = service.listUsers();
        call2.enqueue(new Callback<ListUser>() {
            @Override
            public void onResponse(Call<ListUser> call, Response<ListUser> response) {
                List<User> listUser = response.body().getListUsers();
                int s = listUser.size();
                for(int i = 0; i < s; i++){
                    Log.d("debug3", listUser.get(i).getEmail());
                }

            }

            @Override
            public void onFailure(Call<ListUser> call, Throwable t) {
                Log.d("debug4", t.getMessage());
            }
        });
    }
```

```build.gradle
dependencies {
    compile 'com.android.support:appcompat-v7:25.1.0'
    compile 'com.android.support:support-v4:25.1.0'
    compile 'com.android.support:design:25.1.0'
    compile 'com.google.code.gson:gson:2.7'
    compile 'com.squareup.retrofit2:retrofit:2.1.0'
    compile 'com.squareup.retrofit2:converter-gson:2.1.0'
    testCompile 'junit:junit:4.12'
}
```