안녕하세요. 가나이이입니다^^
오늘 알아볼 내용은 안드로이드 네트워크 통신 라이브러리
"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 |
이상으로 안드로이드 네트워크 통신에 대해 알아보았습니다.
개인적으로 이 라이브러리가 제일 편하고 쉬운 것 같습니다.
질문이나 궁금한 것 있으시면 댓글로 남겨주세요. 감사합니다.
이상
오늘도 즐거운 하루되시구요.
스타트제로에 가나이이였습니다.
'It인터넷' 카테고리의 다른 글
블로그 상위노출 방법(DIA 로직) 분석 및 전략 (1223) | 2020.06.24 |
---|---|
pc 원격제어 원격지원 원격접속 하는법(Feat. 크롬 원격 접속) (1373) | 2019.09.15 |
개발자가 생각해본 디지털 노마드를 실현시킬수 있는 것 (2030) | 2019.09.10 |
처음 코딩 시작할때 흥미 잃지않고 성장하는 법 (2091) | 2019.09.08 |
네이버 ,티스토리 블로그에 소스코드 멋지게 표시하기(Feat. Color Scripter) (3618) | 2019.09.07 |