티스토리 뷰
프론트-> 서버로 json형식으로 값을 주지만 서버가 나한테 걍 String으로 값을 준다는 가정 하에 작성
서버에게 받는 값은 result에 받아서 textview2에 띄움
엑셈엘
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<LinearLayout
android:id="@+id/Sample_LinearLayout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent">
<LinearLayout
android:layout_marginTop="15dp"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal">
<EditText
android:id="@+id/dataText"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:ems="10"
android:inputType="textPersonName"
android:hint="Name" />
<Button
android:id="@+id/sendDataBtn"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:onClick="btn_Click"
android:text="Button" />
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<TextView
android:id="@+id/textView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="TextView" />
<TextView
android:text="좀 떠라 ㅅㅂ"
android:id="@+id/responseView"
android:layout_marginTop="15dp"
android:layout_width="match_parent"
android:textSize="25sp"
android:layout_height="wrap_content"/>
</LinearLayout>
</LinearLayout>
</androidx.constraintlayout.widget.ConstraintLayout>
메인 액티비티
package com.jieun.post_connect_thread_java;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.os.Bundle;
import android.os.Handler;
import android.os.Looper;
import android.os.Message;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import androidx.appcompat.app.AppCompatActivity;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.URL;
public class MainActivity extends AppCompatActivity {
private Handler handler;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// int i = 0;
//Button connectBtn = findViewById(R.id.connectBtn);
handler = new Handler(Looper.getMainLooper());
TextView textView2 = findViewById(R.id.responseView);
btn_Click(textView2);
}
public void btn_Click(View view) {
TextView textView = (TextView) findViewById(R.id.textView);
EditText editText = (EditText) findViewById(R.id.dataText);
TextView textView2 = (TextView) findViewById(R.id.responseView);
textView.setText(editText.getText());
String inputText = editText.getText().toString();
String url = "서버 주소:포트번호";
//ex) http://11.111.111:1000
String data = "{ \"content\" : \""+inputText+"\" }";; //json 형식 데이터
new Thread(() -> {
String result = httpPostBodyConnection(url, data);
// 처리 결과를 UI에 업데이트
handler.post(() -> updateUI(result));
}).start();
}
//
// //메소드 호출 실시
// httpPostBodyConnection(url, data);
private String httpPostBodyConnection(String UrlData, String ParamData) {
// 이전과 동일한 네트워크 연결 코드를 그대로 사용합니다.
// 백그라운드 스레드에서 실행되기 때문에 메인 스레드에서는 문제가 없습니다.
// ...
String totalUrl = "";
totalUrl = UrlData.trim().toString();
//http 통신을 하기위한 객체 선언 실시
URL url = null;
HttpURLConnection conn = null;
//http 통신 요청 후 응답 받은 데이터를 담기 위한 변수
String responseData = "";
BufferedReader br = null;
StringBuffer sb = null;
//메소드 호출 결과값을 반환하기 위한 변수
String returnData = "";
try {
//파라미터로 들어온 url을 사용해 connection 실시
url = null;
url = new URL(totalUrl);
conn = null;
conn = (HttpURLConnection) url.openConnection();
//http 요청에 필요한 타입 정의 실시
conn.setRequestMethod("POST");
conn.setRequestProperty("Content-Type", "application/json; utf-8"); //post body json으로 던지기 위함
conn.setRequestProperty("Accept", "application/json");
conn.setDoOutput(true); //OutputStream을 사용해서 post body 데이터 전송
try (OutputStream os = conn.getOutputStream()) {
byte request_data[] = ParamData.getBytes("utf-8");
Log.d("TAGGG",request_data.toString());
os.write(request_data);
//os.close();
} catch (Exception e) {
Log.d("TAG3","여기다");
e.printStackTrace();
}
//http 요청 실시
conn.connect();
System.out.println("http 요청 방식 : " + "POST BODY JSON");
System.out.println("http 요청 타입 : " + "application/json");
System.out.println("http 요청 주소 : " + UrlData);
System.out.println("http 요청 데이터 : " + ParamData);
System.out.println("");
//http 요청 후 응답 받은 데이터를 버퍼에 쌓는다
br = new BufferedReader(new InputStreamReader(conn.getInputStream(), "UTF-8"));
sb = new StringBuffer();
while ((responseData = br.readLine()) != null) {
sb.append(responseData); //StringBuffer에 응답받은 데이터 순차적으로 저장 실시
}
//메소드 호출 완료 시 반환하는 변수에 버퍼 데이터 삽입 실시
returnData = sb.toString();
Log.d("TAG2", returnData);
//http 요청 응답 코드 확인 실시
String responseCode = String.valueOf(conn.getResponseCode());
System.out.println("http 응답 코드 : " + responseCode);
System.out.println("http 응답 데이터 : " + returnData);
} catch (IOException e) {
e.printStackTrace();
} finally {
//http 요청 및 응답 완료 후 BufferedReader를 닫아줍니다
try {
if (br != null) {
br.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
return returnData; // 네트워크 요청 결과를 반환
}
private void updateUI(String result) {
// 네트워크 작업 완료 후 UI를 업데이트하는 메서드
TextView textView2 = findViewById(R.id.responseView);
//만약 서버한테 받는 값이 json형식이라면 파싱을 해야 함 아니면 \uc5ec\uc218 이런 식으로 보임
textView2.setText(result);
}
}
Manifest
<uses-permission android:name="android.permission.INTERNET"/>
'안드로이드' 카테고리의 다른 글
| [Android/kotlin] 와 쉽다! 뷰 바인딩 이용하기 (0) | 2025.12.13 |
|---|---|
| 안드로이드 이미지 버튼 만들기 및 이벤트 처리 kotlin vs java (0) | 2023.09.28 |
| 0. 강의 선택 및 안드로이드 스튜디오 설치(윈도우 계정 추가하기) (0) | 2023.09.13 |
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- androidstudio
- 멋쟁이사자처럼안드로이드6기
- setOnClickListener
- github
- toast
- 자바
- 라디오버튼
- 리드미
- it직무
- readme
- 깃허브
- jadencase
- kotlin
- vscode+kotlin
- 인턴
- 미래내일일경험인턴
- vscode
- BoundService
- 자바대소문자여부
- 안드로이드스튜디오 #윈도우사용자추가 #코틀린 #인프런코틀린강의
- 라디오그룹
- 대소문자변경
- onclicklistener
- githubreadme
- 안드로이드
- 프로그래머스
- 자바대소문자변경
- 개린이
- 멋쟁이사자처럼6기안드로이드
- 미래내일일경험
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | |||
| 5 | 6 | 7 | 8 | 9 | 10 | 11 |
| 12 | 13 | 14 | 15 | 16 | 17 | 18 |
| 19 | 20 | 21 | 22 | 23 | 24 | 25 |
| 26 | 27 | 28 | 29 | 30 | 31 |
글 보관함
