희원96
코딩 공부 일기
희원96
전체 방문자
오늘
어제
  • 다이어리 (94)
    • 일상 (2)
      • #.일기 (2)
      • 정보처리기사 (0)
    • 코딩 공부 (90)
      • Python (11)
      • Java (12)
      • DB (18)
      • Arduino (5)
      • HTML,CSS (7)
      • JSP, Servlet (14)
      • Javascript (8)
      • jQuery (2)
      • Spring (1)
      • Android (8)
      • ML (4)
      • React (0)
    • 프로젝트 (1)
      • 미니프로젝트 (1)
      • 1차프로젝트 (0)
      • 2차프로젝트 (0)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

  • 개발 공부 일기

인기 글

태그

  • 아두이노
  • DB
  • 데이터베이스
  • JS
  • HTML
  • JavaFestival
  • jQuery
  • 자바
  • 안드로이드
  • Servlet
  • JavaScript
  • 스프링
  • 스마트인재개발원
  • Python
  • ml
  • 제이쿼리
  • CSS
  • 자바스크립트
  • 화이팅
  • 머신러닝
  • Spring
  • JSP
  • 파이썬
  • Database
  • java
  • Ajax
  • arduino
  • Android

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
희원96
카테고리 없음

[Android] Volley [서버통신]

[Android] Volley [서버통신]
카테고리 없음

[Android] Volley [서버통신]

2022. 7. 15. 11:39
Volley란?

-  Android App의 네트워킹을 더 쉽고, 무엇보다 더 빠르게 하는 HTTP 라이브러리

Volley 동작 순서

1. 사용자가 Request객체를 생성하여 요청/응답/에러 처리에 대한 로직을 작성한다.

2. RequestQueue에 추가한다.

3. RequestQueue가 자동으로 Thread를 생성하여 서버로 요청을 보낸 후 응답받는다.

4. 응답이 오면 Request에 등록된 ResponseListener로 응답데이터를 전달한다.

 

* 별도 Thread관리, UI를 위한 handler 를 다룰 필요가 없다.

Volley 라이브러리 추가 설정

라이브러리 추가 : Andorid Volley 구글에 검색 후 dependencies 복사 후 추가

implementation 'com.android.volley:volley:1.2.1'

File >> Project Structure 클릭

Dependencies >> app >> + >> Volley 검색

 

Volley 실습 - 간단한 요청/응답

Volley 사용시 필요한 인터넷 권한 지정하기 
<uses-permission android:name="android.permission.INTERNET" />

추가해야함
android:usesCleartextTraffic="true"
MainActivity
package com.example.ex_0715;

import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;

import com.android.volley.AuthFailureError;
import com.android.volley.Request;
import com.android.volley.RequestQueue;
import com.android.volley.Response;
import com.android.volley.VolleyError;
import com.android.volley.toolbox.StringRequest;
import com.android.volley.toolbox.Volley;

import org.json.JSONException;
import org.json.JSONObject;

import java.util.HashMap;
import java.util.Map;

public class MainActivity extends AppCompatActivity {

    EditText txt_url;
    TextView txt_result;
    Button btn_req;

    // Volley 사용시 꼭 필요한 객체 선언!
    RequestQueue requestQueue; // 요청을 서버에 전달(보내주는) 기능
    StringRequest request; // 요청과 응답에 대한 정보를 담는 기능

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);


        txt_url = findViewById(R.id.txt_url);
        btn_req = findViewById(R.id.btn_req);
        txt_result = findViewById(R.id.txt_result);

        // requestQueue 객체 초기화 하기
        // requestQueue = Volley.newRequestQueue(getApplicationContext());
        requestQueue = Volley.newRequestQueue(MainActivity.this);

        btn_req.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                // 요청하고자 하는 url 주소 가져오기
                String data = txt_url.getText().toString();

                // 1. 전송 방식을 -> GET/POST
                // 2. 요청할 주소
                // 3. 응답에 성공시 수행할 로직을 작성
                // 4. 응답 실패시 수행할 로직 작성

                request = new StringRequest(
                        Request.Method.POST,
                        //url,GET 방식
                        //"http://172.30.1.11:8081/AndroidServer/AndroidTest?data=" + data,

                        "http://172.30.1.11:8081/AndroidServer/AndroidTest",
                        new Response.Listener<String>() {
                            @Override
                            public void onResponse(String response) {

                                try {
                                    JSONObject json = new JSONObject(response);
                                    String result = json.getString("result");

                                    //응답 성공시 진행할 로직 작성
                                    txt_result.setText(result);

                                } catch (JSONException e) {
                                    e.printStackTrace();
                                }

                            }
                        },
                        new Response.ErrorListener() {
                            @Override
                            public void onErrorResponse(VolleyError error) {
                                Toast.makeText(getApplicationContext(),
                                        error.toString(),
                                        Toast.LENGTH_SHORT).show();
                            }
                        }

                ){
                    // post 방식일때 데이터를 추가하기 위한 별도의 메소드가 필요하다!
                    // getPrams
                    @Nullable
                    @Override
                    protected Map<String, String> getParams() throws AuthFailureError {
                        Map<String, String> params = new HashMap<>();

                        params.put("data",data);

                        return params;
                    }
                };

                // 서버에 전달하기 위한 작업 ★★★
                requestQueue.add(request);
            }
        });
    }
}
Eclips ip 통신

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

@WebServlet("/AndroidTest")
public class AndroidTest extends HttpServlet {

	protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
	
	
	System.out.println("서버 요청 들어옴!");
	
	String data = request.getParameter("data");
	
	System.out.println("요청된 값: " + data);
	
	response.setContentType("text/plain; charset=utf-8");
	
	PrintWriter out = response.getWriter();
	
	out.print("{\"result\":\"결과확인\"}");
	
	
	
	
	}

}
    희원96
    희원96
    개발 공부

    티스토리툴바

    단축키

    내 블로그

    내 블로그 - 관리자 홈 전환
    Q
    Q
    새 글 쓰기
    W
    W

    블로그 게시글

    글 수정 (권한 있는 경우)
    E
    E
    댓글 영역으로 이동
    C
    C

    모든 영역

    이 페이지의 URL 복사
    S
    S
    맨 위로 이동
    T
    T
    티스토리 홈 이동
    H
    H
    단축키 안내
    Shift + /
    ⇧ + /

    * 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.