아래의 AsyncTask를 상속받아 오버라이딩하는 클래스에서 오류가 나므로 위에 추가한 게시물의 코드를 참고하도록 하자 (테스트 환경 : AndroidStudio3.2.1, JRE1.8.0, OpenJDK64bit)

하기의 코드는 구현 방안에 대해서만 참고하고 실제 샘플코드로는 활용하지 않는다

 

 

package com.example.ddil.myapplication;

import android.content.DialogInterface;
import android.os.AsyncTask;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;

import org.apache.http.params.HttpConnectionParams;
import org.apache.http.params.HttpParams;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.io.UnsupportedEncodingException;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLConnection;
import java.net.URLEncoder;
import java.util.Iterator;

import javax.net.ssl.HttpsURLConnection;

public class MainActivity extends AppCompatActivity {

    TextView txt_ID, txt_pwd, txt_name, txt_birthday;
    Button btn_id_check, btn_submit;
    EditText edt_ID, edt_pwd1, edt_pwd2, edt_frist_name, edt_last_name, edt_birthday;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        //textview define
        txt_ID = (TextView) findViewById(R.id.txt_ID);
        txt_pwd = (TextView) findViewById(R.id.txt_pwd);
        txt_name = (TextView) findViewById(R.id.txt_name);
        txt_birthday = (TextView) findViewById(R.id.txt_birthday);

        //button define
        btn_submit = (Button) findViewById(R.id.btn_submit);

        //edittext define
        edt_ID = (EditText) findViewById(R.id.edt_ID);
        edt_pwd1 = (EditText) findViewById(R.id.edt_pwd1);
        edt_pwd2 = (EditText) findViewById(R.id.edt_pwd2);
        edt_frist_name = (EditText) findViewById(R.id.edt_frist_name);
        edt_last_name = (EditText) findViewById(R.id.edt_last_name);
        edt_birthday = (EditText) findViewById(R.id.edt_birthday);


        btn_submit.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                //JsonTransfer는 Json데이터를 전송하는것. (아래에서 JsonTransfer라는 함수를 정의한다.)
                JsonTransfer data_transfer = new JsonTransfer();

                //JSONObject는 JSON을 만들기 위함.
                JSONObject json_dataTransfer = new JSONObject();
                try
                {
                    //json_dataTransfer에 ("키값" : "보낼데이터") 형식으로 저장한다.
                    json_dataTransfer.put("user_id", edt_ID.getText().toString());
                    json_dataTransfer.put("user_password", edt_pwd1.getText().toString());
                    json_dataTransfer.put("first_name", edt_frist_name.getText().toString());
                    json_dataTransfer.put("last_name", edt_last_name.getText().toString());
                    json_dataTransfer.put("user_birthday", edt_birthday.getText().toString());

                    //json_dataTransfer의 데이터들을 하나의 json_string으로 묶는다.
                    String json_string = json_dataTransfer.toString();

                    //보내야 할 곳 주소 정의
                    String url = "보내야할곳 주소!";

                    //보내기 전에 json_string 양 쪽 끝에 대괄호를 붙인다. (Object로 처리하기 때문이다. 만약 Array로 처리한다면, 대괄호는 필요없다고 한다.)
                    data_transfer.execute(url,"["+json_string+"]");

                    //Toast.makeText(getApplicationContext(), json_string, Toast.LENGTH_LONG);
                }
                catch (JSONException e)
                {
                    e.printStackTrace();
                }
            }
        });
    }

    public class JsonTransfer extends AsyncTask{
        @Override
        protected String doInBackground(String... params) {
            HttpURLConnection urlConnection;
            String data = params[1];
            String result = null;
            try {
                //Connect
                urlConnection = (HttpURLConnection) ((new URL(params[0]).openConnection()));
                urlConnection.setDoOutput(true);
                urlConnection.setDoInput(true);
                urlConnection.setReadTimeout(10000 /*milliseconds*/);
                urlConnection.setConnectTimeout(15000 /* milliseconds */);
                urlConnection.setRequestProperty("Content-Type", "application/json;charset=utf-8");
                urlConnection.setRequestProperty("X-Requested-With", "XMLHttpRequest");
                //urlConnection.setRequestProperty("Content-Type", "application/json");
                //urlConnection.setRequestProperty("Accept", "application/json");
                urlConnection.setRequestMethod("POST");
                // urlConnection.setFixedLengthStreamingMode(data.getBytes().length);
                //uid,mac,filename,time

                //Write
                OutputStream outputStream = urlConnection.getOutputStream();
                BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(outputStream, "UTF-8"));
                writer.write(data);
                writer.close();
                outputStream.close();

                //Read
                BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(urlConnection.getInputStream(), "UTF-8"));

                String line = null;
                StringBuilder sb = new StringBuilder();


                while ((line = bufferedReader.readLine()) != null)
                {
                    sb.append(line);
                }

                bufferedReader.close();
                result = sb.toString();
            } catch (UnsupportedEncodingException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }
            return result;
        }
    }
}

번호 제목 글쓴이 날짜 조회 수
128 PC를 위한 최고의 안드로이드 에뮬레이터 황제낙엽 2023.01.18 3134
127 [Jetpack Compose UI / 상추님] GDG Jetpack compose 코드랩 수료 후기 (feat. 굿즈) 황제낙엽 2022.12.24 2372
126 [Jetpack Compose UI / kyj1991719] compose - Compose 이해 황제낙엽 2022.12.24 4025
125 [Jetpack Compose UI / 꾸준] Compose 가 뭔데...? 황제낙엽 2022.12.24 4035
124 [Jetpack Compose UI / IIVIKI] Compose 학습과 분석 황제낙엽 2022.12.24 4050
123 [Jetpack Compose UI] 스터디 시작하기 황제낙엽 2022.12.24 4001
122 [개발하는 정대리] 취준생을 위한 안드로이드 앱만들기 - 바텀네비게이션 뷰, 네비게이션 AAC file 황제낙엽 2022.12.22 3882
121 [개발하는 정대리] 취준생을 위한 안드로이드 앱만들기 - 뷰바인딩 file 황제낙엽 2022.12.22 3850
120 [개발하는 정대리] 취준생을 위한 안드로이드 앱만들기 - 라이브데이터 뷰모델 file 황제낙엽 2022.12.21 3827
119 [대왕놀] ImageButton in Compose (IconButton) 황제낙엽 2022.12.20 4105
118 [대왕놀] compose instrumentation test tutorial 황제낙엽 2022.12.20 3985
117 [대왕놀] Switch in Compose 황제낙엽 2022.12.20 4106
116 [대왕놀] EditText in Compose (TextField) 황제낙엽 2022.12.20 4021
115 [대왕놀] margin in Compose 황제낙엽 2022.12.20 4105
114 [대왕놀] modifier in compose 황제낙엽 2022.12.20 4181
113 [대왕놀] Button in Compose file 황제낙엽 2022.12.20 4224
112 [대왕놀] TextView in Compose (Text) 황제낙엽 2022.12.20 4083
111 [대왕놀] ImageView in Compose (Image) 황제낙엽 2022.12.20 4017
110 [대왕놀] LinearLayout in Compose (Row, Column) 황제낙엽 2022.12.20 4114
109 [대왕놀] Introduction to Jetpack compose 황제낙엽 2022.12.20 3965