네트워크 통신 - Client <---> Server
web 요청 기술
- HttpURLConnection
- URL
-InputStream
-Thread, Handler
복잡하다
Volley란?
복잡한 web 요청기술 사용하지 않고 더 간단한 HTTP 통신을 위해 안드로이드에서 제공하는 HTTP 통신 라이브러리
Volley 동작원리
Volley 동작 순서
Volley 사용하기
1. 코드 입력하는 방법
사이트에 접속 후 dependencies 에 있는 코드를 복사 해 온다 ↓
implementation 'com.android.volley:volley:1.1.1'
프로젝트 내 Gradle Script -> build.gradle(Module) -> dependencies에 붙여넣은 후
상단에 Sync Now 클릭!
2. Andriod Studio 내에서 다운받기
메뉴바 File -> Project Structure 클릭
Dependencies -> app - > + 버튼의 Library Dependency 클릭
volley (대문자로 하면 안나옴......) 검색 후 사용하고 싶은 버젼 클릭 후 OK
나는 설정 손대지 않고 OK 클릭 후 기다리면 끝!
간단한 요청/응답 실습
activity_main.xml
플레인텍스트, 버튼, 텍스트뷰 세가지를 만들어주자
MainActivity.java
코드 작성
public class MainActivity extends AppCompatActivity {
EditText txt_url;
Button btn_req;
TextView txt_result;
// 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 url = txt_url.getText().toString();
// 1. 전송방식 -> get/post
// 2. 요청할 url 주소
// 3. 응답에 성공 시 수행할 로직을 작성
// 4. 응답에 실패 시 수행할 로직을 작성
request = new StringRequest(
// 1. 전송방식 -> get/post
Request.Method.GET,
// 2. 요청할 url 주소
url,
// 3. 응답에 성공 시 수행할 로직을 작성
response -> {
// 응답 성공 시 진행할 로직 작성
txt_result.setText(response);
},
// 4. 응답에 실패 시 수행할 로직을 작성
new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
// 응답 실패 시 진행할 로직 작성
Toast.makeText(getApplicationContext(),
error.toString(),
Toast.LENGTH_SHORT).show();
}
}
);
// 서버에 전달하기 위한 작업 ☆☆☆
requestQueue.add(request);
}
});
}
}
AndroidManifest.xml
Volley 사용 시 필요한 인터넷 권한 지정해주자
<uses-permission android:name="android.permission.INTERNET"/>
https 도 사용하기 위해서 코드 작성
android:usesCleartextTraffic="true"
짠 잘 되는것을 확인할 수 있다.
이클립스로 내가만든 사이트 내에 접속하기!!
이클립스 내에 새로운 다이나믹 웹 프로젝트를 만들어주자!
(이미 만들어져 있어서 오류나는 것!)
src/main/java에 새로운 Servlet파일을 만들어 주자
console 창에서 확인하기 위해 "안드로이드 테스트!" 라는 출력문을 찍어주고
페이지 내에 "안녕하세용" 출력하기 위해서
한글 인코딩과 printwriter 꺼내오기~
response.setContentType("text/html; charset=utf-8");
PrintWriter out = response.getWriter();
MainActivity.java 에서 url 주소만 내 사이트 주소로 바꿔주자
버튼 클릭시 내가 띄운 안녕하세용 이 잘 출력되는것을 확인할 수 있다
Get방식으로 페이지에 데이터 보내기
쿼리스트링으로 데이터를 보내보자
public class MainActivity extends AppCompatActivity {
EditText txt_url;
Button btn_req;
TextView txt_result;
// 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. 요청할 url 주소
// 3. 응답에 성공 시 수행할 로직을 작성
// 4. 응답에 실패 시 수행할 로직을 작성
request = new StringRequest(
// 1. 전송방식 -> get/post
Request.Method.GET,
// 2. 요청할 url 주소
"http://192.168.0.96:8083/AndroidTest/andoridTest?data="+data,
// 3. 응답에 성공 시 수행할 로직을 작성
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();
}
}
},
// 4. 응답에 실패 시 수행할 로직을 작성
new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
// 응답 실패 시 진행할 로직 작성
Toast.makeText(getApplicationContext(),
error.toString(),
Toast.LENGTH_SHORT).show();
}
}
);
// 서버에 전달하기 위한 작업 ☆☆☆
requestQueue.add(request);
}
});
}
}
Post방식으로 페이지에 데이터 보내기
- post 방식은 데이터를 보내기 위해 새로운 메소드가 요구된다
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;
Button btn_req;
TextView txt_result;
// 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. 요청할 url 주소
// 3. 응답에 성공 시 수행할 로직을 작성
// 4. 응답에 실패 시 수행할 로직을 작성
request = new StringRequest(
// 1. 전송방식 -> get/post
Request.Method.POST,
// 2. 요청할 url 주소
//"http://192.168.0.96:8083/AndroidTest/andoridTest?data="+data,
"http://192.168.0.96:8083/AndroidTest/andoridTest",
// 3. 응답에 성공 시 수행할 로직을 작성
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();
}
}
},
// 4. 응답에 실패 시 수행할 로직을 작성
new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
// 응답 실패 시 진행할 로직 작성
Toast.makeText(getApplicationContext(),
error.toString(),
Toast.LENGTH_SHORT).show();
}
}
){
// post 방식일 때 데이터를 추가하기 위한 별도의 메소드가 필요하다!
// getParams() 입력!
@Nullable
@Override
protected Map<String, String> getParams() throws AuthFailureError {
Map<String,String> params = new HashMap<>();
params.put("data",data);
return params;
}
};
// 서버에 전달하기 위한 작업 ☆☆☆
requestQueue.add(request);
}
});
}
}
성공!
'Android' 카테고리의 다른 글
[Android Studio] 안드로이드 스튜디오 Event 실습 02 (0) | 2022.07.22 |
---|---|
[Android Studio] 영화 API를 이용한 실습 (0) | 2022.07.18 |
[Android Studio] 안드로이드 스튜디오 Event & Event 실습 (0) | 2022.07.08 |
[Android Studio] Layout이란? Layout 기본예제 (0) | 2022.07.07 |
[Android Studio] 안드로이드 스튜디오 프로젝트 만들기 & 기본 예제 (0) | 2022.07.07 |