반응형
1. 인터넷 권한얻기
네트워크 통신을 하기위해서는 당연히 인터넷 권한을 얻어야 한다.
AndroidManifast.xml로 들어가 해당 코드를 입력한다.
<uses-permission android:name="android.permission.INTERNET" />
2. HTTP Connection Class 생성
public class RequestHttpURLConnection {
public static String postRequest(String _url, ContentValues _params) {
HttpURLConnection urlConn = null;
StringBuffer sbParams = new StringBuffer();
if (_params == null)
sbParams.append("");
else {
boolean isAnd = false;
String key;
String value;
for(Map.Entry<String, Object> parameter : _params.valueSet()){
key = parameter.getKey();
value = parameter.getValue().toString();
if (isAnd)
sbParams.append("&");
sbParams.append(key).append("=").append(value);
if (!isAnd)
if (_params.size() >= 2)
isAnd = true;
}
}
try{
URL url = new URL(_url);
urlConn = (HttpURLConnection) url.openConnection();
urlConn.setRequestMethod("POST");
urlConn.setRequestProperty("Accept-Charset", "UTF-8");
urlConn.setRequestProperty("Context_Type", "application/x-www-form-urlencoded;cahrset=UTF-8");
String strParams = sbParams.toString();
OutputStream os = urlConn.getOutputStream();
os.write(strParams.getBytes("UTF-8"));
os.flush();
os.close();
if (urlConn.getResponseCode() != HttpURLConnection.HTTP_OK)
return null;
BufferedReader reader = new BufferedReader(new InputStreamReader(urlConn.getInputStream(), "UTF-8"));
String line;
String page = "";
while ((line = reader.readLine()) != null){
page += line;
}
return page;
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
if (urlConn != null)
urlConn.disconnect();
}
return null;
}
}
3. XML 버튼 생성
이벤트 발생을 위해 xml 버튼을 생성하는 코드를 작성한다.
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="확인"
android:textSize="20sp"
android:textColor="#fff"
android:id="@+id/btn_1"/>
4. JAVA 코드 작성
실제 이벤트가 일어났을 때 POST 통신을 할 파라미터를 설정하고 AsyncTask를 이용해 HTTP 통신을 하는 코드이다.
AsyncTask는 비동기식으로 HTTP통신을 하기위한 방법이다.
public class MainActivity extends AppCompatActivity implements View.OnClickListener {
Button btn_1;
private final String url = "서버주소";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//초기화
btn_1 = findViewById(R.id.btn_1);
btn_1.setOnClickListener(this);
}
@Override
public void onClick(View view) {
switch (view.getId()){
case R.id.btn_1: //버튼
ContentValues values = new ContentValues();
values.put("파라미터 명", "데이터 값");
values.put("파라미터 명", "데이터 값");
HttpUtil networkTask = new HttpUtil(url, values);
networkTask.execute();
break;
}
}
public class HttpUtil extends AsyncTask<Void, Void, String> {
String url;
ContentValues values;
HttpUtil(String url, ContentValues values){
this.url = url;
this.values = values;
}
@Override
protected void onPreExecute() {
super.onPreExecute();
//progress bar를 보여주는 등등의 행위
}
@Override
protected String doInBackground(Void... params) {
RequestHttpURLConnection requestHttpURLConnection = new RequestHttpURLConnection();
String result = requestHttpURLConnection.postRequest(url, values);
return result; // 아래 onPostExecute()의 파라미터로 전달됩니다.
}
@Override
protected void onPostExecute(String result) {
// 결과에 따른 UI 수정
}
}
}
5. PHP 작성 (Mysql SELECT 문 예제)
$con = mysqli_connect("DB주소","DB계정","DB비번","DB명");
$NAME = $_POST['파라미터명'];
$AGE = $_POST['파라미터명'];
$sql = "SELECT * FROM 테이블명 WHERE 컬럼명 = '{$NAME}' AND 컬럼명 = '{$AGE}'";
$statement = mysqli_query($con,$sql);
$res = array();
while($row = mysqli_fetch_array($statement))
{
$res["내보낼 파라미터명"] = $row["컬럼명"];
}
echo json_encode($res,JSON_UNESCAPED_UNICODE);
예제로 이름과 나이를 조건으로 학생의 점수를 가져오는 SELECT문을 작성했다.
php 코드는 개발자의 필요에따라 수정할 수 있다.
안드로이드 보안정책으로 인해 HTTPS통신을 권장하고 있기때문에 위와같이 HTTP통신을 진행하여도 제대로 실행이 되지 않는 경우가있다.
공부용으로 서버통신을 한다면 HTTP 사용을 허용해야한다.
AndroidManifest.xml에 아래 코드를 입력해주면 된다.
android:usesCleartextTraffic="true"
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme.NoActionBar"
android:usesCleartextTraffic="true">
구글링 교과서에서는 보안상 안전한 HTTPS통신을 하는것을 추천한다.
반응형
'APP > AndroidStudio' 카테고리의 다른 글
[Android Studio] 간단한 커스텀 폰트 사용하기 원하는 글꼴 넣기 안드로이드 스튜디오 (0) | 2020.06.21 |
---|---|
[Android Studio] 안드로이드 스튜디오 시작페이지 메인엑티비티 변경하기 (0) | 2020.06.18 |
[Android Studio] 간단하게 캡처금지하기, 캡쳐방지 하기 (0) | 2020.06.15 |
[Android Studio] 간단하게 버튼 중복클릭 시간 제한하기 (0) | 2020.06.12 |
안드로이드 스튜디오 타이틀 없애기, 액션바 없애기 Android Studio (0) | 2020.06.03 |