티스토리 뷰
HTTP로 웹 서버에 접속하여 특정 요청을 보내거나 응답을 보내는 동작의 경우, 표준 자바의 방식을 그대로 사용할 수 있다. 자바에서 HTTP 클라이언트를 만드는 가장 간단한 방법은 URL 객체를 만들고 이 객체의 openConnection() 메서드를 호출하여 HttpURLConnection객체를 만드는 것이다.
어려운 내용은 없으니 바로 한번 예제를 확인해보자.
◎MainActivity.java
package com.example.samplehttp;
import android.os.Handler;
import android.os.Looper;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
public class MainActivity extends AppCompatActivity {
EditText editText;
TextView textView;
Handler handler = new Handler(Looper.getMainLooper());
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
editText = findViewById(R.id.editText);
textView = findViewById(R.id.textView);
Button button = findViewById(R.id.button);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
final String urlStr = editText.getText().toString();
new Thread(new Runnable() {
@Override
public void run() {
request(urlStr);
}
}).start();
}
});
}
public void request(String urlStr) {
StringBuilder output = new StringBuilder();
try{
URL url = new URL(urlStr);
//HttpURLConnection 객체 만들기
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
if(conn != null) {
// Timeout 설정
conn.setConnectTimeout(10000);
// GET & POST 메서드 설정
conn.setRequestMethod("GET");
// 이 객체에 입력이 가능하도록 설정,
// 응답코드가 HTTP_OK인 경우에는 정상 응답이므로 들어온 스트림은 문자열로 반환
conn.setDoInput(true);
int resCode = conn.getResponseCode();
BufferedReader reader = new BufferedReader(new InputStreamReader(conn.getInputStream()));
String line = null;
while(true) {
line = reader.readLine();
if(line == null) {
break;
}
output.append(line+"\n");
}
reader.close();
conn.disconnect();
}
} catch (Exception e) {
e.printStackTrace();
}
println("응답 -> " + output.toString());
}
public void println(final String line) {
handler.post(new Runnable() {
@Override
public void run() {
textView.append(line + "\n");
}
});
}
}
또한 이 앱이 인터넷 권한을 사용하므로, 매니페스트 파일에 권한 속성과 cleartext HTTP와 같은 cleartext 네트워크 트래픽을 사용할 지 여부를 아래 속성을 입력하여 설정해준다.
android:usesCleartextTraffic="true"
◎AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.samplehttp">
<uses-permission android:name="android.permission.INTERNET"/>
<application
android:usesCleartextTraffic="true"
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/Theme.SampleHttp">
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
</activity>
</application>
</manifest>
이제, 어플을 켜고 아래 링크를 입력하여 영화 순위를 json 형식으로 가져오자.
더보기
http://www.kobis.or.kr/kobisopenapi/webservice/rest/boxoffice/searchDailyBoxOfficeList.json?key=db52fa472cff30ddd6de7650beed36d0&targetDt=20220409%EF%BB%BF
반응형
'Mobile > Android' 카테고리의 다른 글
[Android] Database 1: 모바일 데이터베이스 (0) | 2022.04.11 |
---|---|
[Android] Volley lib (0) | 2022.04.10 |
[Android] Thread로 애니메이션 만들기 (0) | 2022.04.08 |
[Android] AsyncTask (0) | 2022.04.07 |
[Android] Thread로 메시지 전송 (0) | 2022.04.07 |
Comments
최근에 올라온 글
최근에 달린 댓글
TAG
- redux-thunk
- redux
- react
- Promise
- 인천 구월동 맛집
- 인천 구월동 이탈리안 맛집
- Async
- 맛집
- 정보보안기사 #실기 #정리
- AsyncStorage
- 이탈리안 레스토랑
- await
- 파니노구스토
- javascript
- react-native
- Total
- Today
- Yesterday