[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); } } }
댓글
댓글 쓰기