안드로이드

안드로이드 Volley 와 Vertx HttpServer HTTP 통신하기!

알통몬_ 2018. 7. 4. 14:09
반응형


공감 및 댓글은 포스팅 하는데

 아주아주 큰 힘이 됩니다!!

포스팅 내용이 찾아주신 분들께 

도움이 되길 바라며

더 깔끔하고 좋은 포스팅을 

만들어 나가겠습니다^^

 


이번 포스팅에서는 안드로이드와 Vert.x HttpServer 의 HTTP 통신에 대해 공부합니다.


안드로이드 HTTP 라이브러리 : Volley


JAVA HTTP SERVER 라이브러리 : Vert.x ( Core, Web, Unit )



1. 안드로이드 프로젝트 만들고 INTERNET PERMISSION 추가,

                                    VOLLEY 라이브러리 종속성 추가

1
2
3
4
5
6
7
8
9
<?xml version="1.0" encoding="utf-8"?>
<manifest ...>
 
    <uses-permission android:name="android.permission.INTERNET"/>
 
    <application....>
    </application>
 
</manifest>
cs

1
2
3
4
5
6
7
dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])
    .......
    implementation 'com.android.volley:volley:1.1.0'
 
}
 
cs


String Request 클래스 사용하여 HTTP Request

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
47
48
49
50
51
public class MainActivity extends AppCompatActivity {
 
    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        final Button btn = findViewById(R.id.btn);
        final RequestQueue queue = Volley.newRequestQueue(this);
        final String url = "http://10.20.2.119:9292";
        btn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                try {
                    StringRequest request = new StringRequest(Request.Method.POST, url,
                            //요청 성공 시
                            new Response.Listener<String>() {
                                @Override
                                public void onResponse(String response) {
                                    Log.d("result""[" + response + "]");
                                }
                            },
                            // 에러 발생 시
                            new Response.ErrorListener() {
                                @Override
                                public void onErrorResponse(VolleyError error) {
                                    Log.d("error""" + error.getMessage() + "");
                                }
                            }) {
                        //요청보낼 때 추가로 파라미터가 필요할 경우
                        //url?a=xxx 이런식으로 보내는 대신에 아래처럼 가능.
                        @Override
                        protected Map<StringString> getParams() throws AuthFailureError {
                            Map<StringString> params = new HashMap<>();
                            params.put("id""name");
                            params.put("id2""name2");
                            Log.d("param", params.toString());
                            return  params;
                        }
                    };
 
                    queue.add(request);
 
                } catch (Exception e) {
                    e.printStackTrace();
 
                }
            }
        });
    }
}
 
cs



2. 이클립스 메이븐프로젝트 만들기

메이븐 프로젝트를 생성한 후에 pom.xml 파일의 <dependencies></...> 안에 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
        <!-- https://mvnrepository.com/artifact/io.vertx/vertx-core -->
        <dependency>
            <groupId>io.vertx</groupId>
            <artifactId>vertx-core</artifactId>
            <version>3.5.2</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/io.vertx/vertx-unit -->
        <dependency>
            <groupId>io.vertx</groupId>
            <artifactId>vertx-unit</artifactId>
            <version>3.5.2</version>
            <scope>test</scope>
        </dependency>
        <!-- https://mvnrepository.com/artifact/io.vertx/vertx-web -->
        <dependency>
            <groupId>io.vertx</groupId>
            <artifactId>vertx-web</artifactId>
            <version>3.5.2</version>
        </dependency>
 
cs


위 세 가지를 추가해줍니다.


AbstractVerticle 클래스를 상속 받는 main() 메소드를 포함한 클래스를 만들어 줍니다.

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
public class HttpServer extends AbstractVerticle {
 
    @Override
    public void start() {
 
        Router router = Router.router(Vertx.vertx());
        router.post().handler(BodyHandler.create());
        router.route().handler(rc -> {
            String path = rc.request().path();
            MultiMap map = rc.request().params();
            HttpServerResponse res = rc.response();
            String id = map.get("id");
            JsonObject json = new JsonObject().put("code""000").put("id", id);
 
            res.putHeader("content-type""text/plain").end(json.toString());
        });
 
        Vertx.vertx().createHttpServer().requestHandler(router::accept).listen(9292);
    }
 
    public static void main(String[] args) throws Exception {
 
        HttpServer server = new HttpServer();
        server.start();
 
    }
}
 
cs


위 코드들을 가지고 테스트 해보시면 금방 이해가 되실 거에요.

이상입니다.

감사합니다.

궁금하시거나 이해 안되는 부분들은 댓글 달아주시면 답변 드리겠습니다.


반응형