본문 바로가기

It인터넷

안드로이드 네트워크 통신하는 법 Retrofit 사용법 (Feat. Retrofit)

안녕하세요. 가나이이입니다^^

 

안드로이드 네트워크 통신 라이브러리

오늘 알아볼 내용은 안드로이드 네트워크 통신 라이브러리

"Retrofit" 사용법에 대해서 알아보겠습니다.

 

먼저 "Build.gradle(Module:app)"

 

1
2
implementation 'com.squareup.retrofit2:retrofit:2.5.0'
implementation 'com.squareup.retrofit2:converter-gson:2.4.0'
cs

 

위에 코드를 "dependencies"에 추가해 줍니다.

 

 

그다음 "AndroidManifest.xml"에서

인터넷 권한을 허용하기위해 

 

1
2
3
<manifest xmlns:...>
  <uses-permission android:name="android.permission.INTERNET" />
<application ...>
cs

1번줄과 3줄사이에 2번째 줄

"uses-permission"을 추가해줍니다.

 

 

자 이번에는 "APIclient.java"를 생성합니다. 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
 
import retrofit2.Retrofit;
import retrofit2.converter.gson.GsonConverterFactory;
 
public class APIclient {
    private static Retrofit retrofit =null;
    public  static Retrofit getClient(){
        if(retrofit==null){
            Gson gson =new GsonBuilder()
                    .setLenient()
                    .create();
 
            retrofit= new Retrofit.Builder()
                    .baseUrl("[통신할 서버 주소]")
                    .addConverterFactory(GsonConverterFactory.create(gson))
                    .build();
        }
        return retrofit;
    }
}
 
cs

 

여기에서 "[통신할 서버 주소]"를 적을 때

"http://"나 "https://"를 생략하시면 안됩니다.

 

애뮬레이터 로컬호스트는 "http://127.0.0.1:8080"이 아니라

"http://10.0.2.2:8080"입니다.

 

이번에는

"APIInterface.java"라는 인터페이스를 만들어 줍니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
public interface ApiInterface {
 
//GET 방식
 
/*
@GET("/[서버 경로]")
Call<["응답 받을 자료형"]> ["함수명"](@Query("서버로 보낼 변수명") ["자료형"] ["변수명"])   //쉽표를 통해 여러개를 넣을수 있습니다. ex) @Query("Name") String name , @Query("PhoneNum") String phone;
*/
@GET("/GET_test")
Call<String> getTestName(@Query("Name"String name);
 
 
//POST 방식 2가지
 
/*
첫번째
@FormUrlEncoded
@POST("/[서버 경로]")
Call<["응답 받을 자료형"]> ["함수명"](@Field("서버로 보낼 변수명") ["자료형"] ["변수명"])   //쉽표를 통해 여러개를 넣을수 있습니다. ex) @Field("Name") String name , @Field("PhoneNum") String phone;
*/
 
@FormUrlEncoded
@POST("/POST_test")
Call<String> postTestName(@Field("Name"String name);
 
/*두번째
"User 라는 Class를 만들어서 한번에 여러내용을 통채로 보낼수가 있습니다." 
 
ex) 
public class User{
@SerializedName("Name")
public String name;
@SerializedName("PhoneNum")
public String phone;
 
public User(String name,String phone){
this.name = name;
this.phone = phone;
    }
}
 */
 
@Headers({"Content-Type: application/json"})
@POST("/POST_test2")
Call<String> postTestName2(@Body User user);
}
cs

 

거의 다 왔습니다.

코드에 사용하기만 하면 됩니다.

"MainActivity.class"에 아래 내용을 작성하여 테스트 해봅시다.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
public class MainActivity extends AppCompatActivity {
    ApiInterface apiService; //인터페이스 선언 해주시고
 
  @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
 
 apiService = APIclient.getClient().create(ApiInterface.class);//APIClient를 생성해 줍니다.
    }
//함수 생성
void GetName(){
//POST방식으로 해보겠습니다. GET도 비슷합니다.
Call<String> call =apiService.postTextName("[name 값을 적어주세요]");
 call.enqueue(new Callback<String>() {
                        @Override
                        public void onResponse(Call<String> call, Response<String> response) {
                            
                           //응답이 왔을때 구간
                            //response로 응답값이 옵니다.
                            Toast.makeText(getApplicationContext(),response.toString(),Toast.LENGTH_SHORT).show();
                           
                        }
 
                        @Override
                        public void onFailure(Call<String> call, Throwable t) {
                            //통신 실패일때 구간
            
                        }
                    });
}
cs

 

"GetName()"이라는 함수를 버튼이벤트에 등록해서 사용하보시면 네트워크 통신 테스트를 할수 있습니다.

 

혹시 버튼 클릭 이벤트를 모르시는 분들은 아래 코드를 보세요.

도움이 되실겁니다.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
public class MainActivity extends AppCompatActivity {
    Button button;
 
  @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        
        button =(Button)findViewById(R.id.btn); //여기에 R.id.btn은 activity_main.xml에 가서 버튼 추가해주시고 버튼 id를 btn으로 적은 겁니다.
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
               //여기에 클릭되었을 때 실행할 코드를 적어주세요. 
                /*
    ex)            
                GetName():
    */                      
            }
        });
 
    }
}
cs

 

이상으로 안드로이드 네트워크 통신에 대해 알아보았습니다.

개인적으로 이 라이브러리가 제일 편하고 쉬운 것 같습니다.

 

질문이나 궁금한 것 있으시면 댓글로 남겨주세요. 감사합니다.

 

이상

오늘도 즐거운 하루되시구요.

스타트제로에 가나이이였습니다.