[Android] kotlin과 node js를 이용한 http통신
메소드 : Get
Clinet -> Server로 요청하기 소스
- MainActivity.kt
Clinet -> Server로 요청하기 소스
1. 서버로 요청하여 응답받기
- MainActivity.kt
import android.os.AsyncTask
import android.support.v7.app.AppCompatActivity
import android.os.Bundle
import android.widget.Button
import android.widget.EditText
import android.widget.TextView
import org.jetbrains.anko.AnkoComponent
import org.jetbrains.anko.AnkoContext
import java.io.BufferedReader
import java.net.HttpURLConnection
import java.io.InputStreamReader
import java.net.URL
import org.jetbrains.anko.*
import org.jetbrains.anko.sdk25.coroutines.onClick
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main);
JSONTask().execute("http://192.168.0.182:3000")
}
class JSONTask : AsyncTask<String, String, String>() {
override fun doInBackground(vararg params: String?): String? {
// ...
val url = params[0]
val obj = URL(url)
with(obj.openConnection() as HttpURLConnection) {
// optional default is GET
requestMethod = "GET"
println("\nSending 'GET' request to URL : $url")
println("Response Code : $responseCode")
BufferedReader(InputStreamReader(inputStream)).use {
var response = it.readText()
println("response = "+response)
return response
}
}
return null
}
override fun onPostExecute(result: String?) {
super.onPostExecute(result)
println("결과 = "+result)
}
}
}
2. Anko를 이용하여 안드로이드 UI적용하기
- MainActivity.kt
import android.os.AsyncTask
import android.support.v7.app.AppCompatActivity
import android.os.Bundle
import android.widget.Button
import android.widget.EditText
import android.widget.TextView
import org.jetbrains.anko.AnkoComponent
import org.jetbrains.anko.AnkoContext
import java.io.BufferedReader
import java.net.HttpURLConnection
import java.io.InputStreamReader
import java.net.URL
import org.jetbrains.anko.*
import org.jetbrains.anko.sdk25.coroutines.onClick
class MainActivity : AppCompatActivity() {
private lateinit var name : EditText
private lateinit var tView : TextView
private lateinit var clickmeBtn : Button
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
createView()
JSONTask().execute("http://192.168.0.182:3000")
}
fun createView() {
verticalLayout {
padding = dip(8)
name = editText {
hint = "Enter your name"
textSize = 10f
}
tView = textView {
textSize = 10f
}
clickmeBtn = button("Click me") {
textSize = 10f
onClick {
clickMeClick()
}
}
}
}
fun clickMeClick() {
tView.text=name.text
}
class JSONTask : AsyncTask<String, String, String>() {
override fun doInBackground(vararg params: String?): String? {
// ...
val url = params[0]
val obj = URL(url)
with(obj.openConnection() as HttpURLConnection) {
// optional default is GET
requestMethod = "GET"
println("\nSending 'GET' request to URL : $url")
println("Response Code : $responseCode")
BufferedReader(InputStreamReader(inputStream)).use {
var response = it.readText()
println("response = "+response)
return response
}
}
return null
}
override fun onPostExecute(result: String?) {
super.onPostExecute(result)
println("결과 = "+result)
}
}
}
Tip. JAVA를 이용해서 http통신하기
- MainActivity.kt
import android.os.AsyncTask;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import org.json.JSONObject;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
public class MainActivity extends AppCompatActivity {
private TextView tvData;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
tvData = (TextView)findViewById(R.id.textView);
Button btn = (Button)findViewById(R.id.httpTest);
//버튼이 눌리면 아래 리스너가 수행된다.
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
System.out.println("Button click !! kotlin");
//아래 링크를 파라미터를 넘겨준다는 의미.
new JSONTask().execute("http://192.168.0.182:3000");
}
});
}
public class JSONTask extends AsyncTask<String, String, String>{
@Override
protected String doInBackground(String... urls) {
try {
//JSONObject를 만들고 key value 형식으로 값을 저장해준다.
JSONObject jsonObject = new JSONObject();
jsonObject.accumulate("user_id", "androidTest");
jsonObject.accumulate("name", "yun");
HttpURLConnection con = null;
BufferedReader reader = null;
try{
//URL url = new URL("http://192.168.25.16:3000/users");
URL url = new URL(urls[0]);//url을 가져온다.
System.out.println(url+": address ");
con = (HttpURLConnection) url.openConnection();
con.connect();//연결 수행
//입력 스트림 생성
InputStream stream = con.getInputStream();
//속도를 향상시키고 부하를 줄이기 위한 버퍼를 선언한다.
reader = new BufferedReader(new InputStreamReader(stream));
//실제 데이터를 받는곳
StringBuffer buffer = new StringBuffer();
//line별 스트링을 받기 위한 temp 변수
String line = "";
//아래라인은 실제 reader에서 데이터를 가져오는 부분이다. 즉 node.js서버로부터 데이터를 가져온다.
while((line = reader.readLine()) != null){
buffer.append(line);
}
//다 가져오면 String 형변환을 수행한다. 이유는 protected String doInBackground(String... urls) 니까
return buffer.toString();
//아래는 예외처리 부분이다.
} catch (MalformedURLException e){
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
//종료가 되면 disconnect메소드를 호출한다.
if(con != null){
con.disconnect();
}
try {
//버퍼를 닫아준다.
if(reader != null){
reader.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}//finally 부분
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
//doInBackground메소드가 끝나면 여기로 와서 텍스트뷰의 값을 바꿔준다.
@Override
protected void onPostExecute(String result) {
super.onPostExecute(result);
tvData.setText(result);
}
}
}
댓글
댓글 쓰기