반응형

안드로이드 스튜디오에서 okhttp3를 사용하여 JSON 데이터를 비동기 방식으로 전송하고 수신하는 코드는 다음과 같습니다. 

(참고 app: build.gradle의 dependencies에 추가)

implementation 'com.squareup.okhttp3:okhttp:4.9.3'

(manifest에 권한 추가)

<uses-permission android:name="android.permission.INTERNET"/>
import okhttp3.*;
import org.json.JSONException;
import org.json.JSONObject;
import java.io.IOException;

public class MainActivity extends AppCompatActivity {

    private OkHttpClient client = new OkHttpClient();
    private MediaType JSON = MediaType.parse("application/json; charset=utf-8");

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

        // JSON 객체 생성
        JSONObject json = new JSONObject();
        try {
            json.put("name", "John Doe");
            json.put("age", 30);
        } catch (JSONException e) {
            e.printStackTrace();
        }

        // RequestBody 생성
        RequestBody body = RequestBody.create(json.toString(), JSON);

        // Request 생성
        Request request = new Request.Builder()
                .url("https://example.com/api")
                .post(body)
                .build();

        // 비동기 방식으로 요청 전송
        client.newCall(request).enqueue(new Callback() {
            @Override
            public void onFailure(Call call, IOException e) {
                e.printStackTrace();
            }

            @Override
            public void onResponse(Call call, Response response) throws IOException {
                if (!response.isSuccessful()) {
                    throw new IOException("Unexpected code " + response);
                }

                // 수신된 JSON 데이터 디버그 로그로 출력
                try {
                    String responseData = response.body().string();
                    JSONObject receivedJson = new JSONObject(responseData);
                    Log.d("Received JSON", receivedJson.toString());
                } catch (JSONException e) {
                    e.printStackTrace();
                }
            }
        });
    }
}

 

* 에러 관련

not permitted by network security policy

  • 버전이 올라가면서 기본적으로 http는 거부한다.. 이런 에러를 만날 것이다.
android okhttp not permitted by network security policy
해결방안은... 
manifest, application 태그
android:usesCleartextTraffic="true"

  • 하지만 스토어에 등록은 안될 것이다!!. https에 SSL 인증까지 해야 등록가능..
  • 즉, 테스트 용도에서는 가능.

NetworkOnMainThreadException , StrictMode$AndroidBlockGuardPolicy

  • 메인 쓰레드에서 네트웍을 블로킹방식 ( execute() )으로 하게 되면 만나는 에러...
  • 쓰레드를 만들어 돌리든지, 비동기 방식으로 변경..
new Thread() {
    public void run() {
        try {
            listFile();
        } catch (MalformedURLException e) {
            e.printStackTrace();
        }
    }
}.start();

 

'Develop > Android' 카테고리의 다른 글

ViewPager2, TabLayout  (0) 2023.03.19
RecyclerView, Firebase DB, reload  (0) 2023.03.19
반응형

원격 mysql 서버에 있는 DB의 스키마 작성 쿼리만 얻고 싶을 때?

 

mysqldump --no-data -h [서버IP] -P [포트] -u [사용자] -p [DB명]

  • 옵션 대문자 P와 소문자 p를 헛갈리지 않도록 주의!
  • 보통 mysql 디폴트 포트는 3306 이지만 관리자가 변경할 수 도 있다. 
  • --no-data 옵션으로 데이터는 받지 않고, 스키마만 받을 수 있다. (create table 만 나옴)
  • -p 옵션은 password를 프롬프트로 입력받겠다는 의미이다. -p를 생략하면 패스워드 없이 인증하려고 시도하여 인증실패 날 수 있다. 프롬프트로 패스워드를 받지 않고 커맨드에 패스워드를 직접 넣으려면 -p[패스워드]  이렇게 공백없이 붙여쓴다.   -p 옵션뒤에 공백을 넣고 패스워드를 넣으면  프롬프트로 패스워드 넣으라고 나오고, 뒤에 나온 스트링을 DB명으로 인식하여 찾게 된다.

 

mysql 클라이언트 옵션도 동일하다..

  • mysql  -h [서버IP] -P [포트] -u [사용자] -p
  • mysql  -h [서버IP] -P [포트] -u [사용자] -p[패스워드]
  • mysql  -h [서버IP] -P [포트] -u [사용자] -p [DB명]
  • mysql  -h [서버IP] -P [포트] -u [사용자] -p[패스워드] [DB명]

( -h 옵션 생략시 로컬 호스트 , -P 생략시 3306, -p 생략시 암호없음)

 

반응형

아래 글은 ChatGPT가 작성하게 해 본 겁니다. 내용이 정확하지 않을 수 있으니, 조심하세요...

요약 : 기본 사항을 이해하고, 적절한 형태를 사용하고, 점차적으로 체중 증가, 부피 증가, 변화, 영양에 중점을두고 휴식을 취함으로써 데 드리프트 체중을 증가시킵니다.

"## 데드 리프트 체중을 신속하게 늘리기 위해 어떻게 운동합니까?

img

데드 리프트는 힘과 힘을 얻기위한 가장 중요한 연습 중 하나입니다. 또한 마스터하기 가장 어려운 운동 중 하나입니다. 모든 운동과 마찬가지로 데드 리프트 체중을 늘리려면 일관성을 높이고 운동을 올바르게 수행해야합니다. 이 기사는 데 드리프트 체중을 신속하게 늘리기 위해 운동하는 방법에 대한 팁을 제공합니다.

기본 사항을 이해하십시오

데드 리프트 체중을 늘리기 시작하기 전에 운동의 기본 사항을 이해하는 것이 중요합니다. 운동의 적절한 형태와 기술뿐만 아니라 데드 리프트에 사용되는 근육을 알아야합니다. 이렇게하면 이익을 극대화하고 부상을 예방하는 데 도움이됩니다.

적절한 형태를 사용하십시오

데드 리프트를 수행 할 때는 적절한 형태를 사용하는 것이 중요합니다. 형태는 일관성이 있어야하며 올바른 근육을 참여시키는 데 집중해야합니다. 올바른 양식을 사용하지 않는 경우 적절한 형태로 최대한 많은 무게를 들어 올릴 수 없습니다.

체중을 점차적으로 증가시킵니다

데드 리프트의 무게를 늘리면 점차적으로 수행하는 것이 중요합니다. 이로 인해 부상을 입을 수 있으므로 체중을 너무 빨리 증가시키지 않아야합니다. 편안한 체중으로 시작하고 더 강해지면서 체중을 점차적으로 증가시킵니다.

볼륨 증가

데드 리프트 체중을 빠르게 늘리려면 운동량을 늘리는 것이 중요합니다. 이것은 운동의 더 많은 세트와 담당자를 수행하는 것을 의미합니다. 운동량을 늘리면 근육과 힘을 키우는 데 도움이됩니다.

변형을 사용하십시오

표준 데 드리프트를 수행하는 것 외에도 일상에 변형을 통합해야합니다. 이것은 운동을 흥미롭고 도전적으로 유지하는 데 도움이 될 수 있습니다. 데드 리프트의 변화는 다른 근육을 목표로하는 데 도움이 될 수 있습니다.

영양에 중점을 둡니다

영양은 힘을 얻고 데 드리프트 체중을 증가시키는 데 중요한 요소입니다. 균형 잡힌 식단을 먹고 충분한 단백질을 섭취하면 근육을 키우고 운동을 지원하는 데 도움이됩니다.

나머지

휴식은 모든 운동 루틴의 중요한 부분입니다. 휴식은 근육이 회복하는 데 도움이되며 부상을 예방하는 데 도움이됩니다. 운동 사이에 충분한 휴식을 취하십시오.

이 팁을 따르면 데드 리프트 체중을 신속하게 늘릴 수 있어야합니다. 적절한 형태를 사용하고 체중을 점차적으로 늘리는 것을 잊지 마십시오. 변형을 사용하여 운동을 흥미롭게 유지하고 영양에 초점을 맞추십시오. 마지막으로 운동 사이에 휴식을 취하십시오."

'AI(DeepLearning)' 카테고리의 다른 글

[ChatGPT] 글쓰기 테스트  (1) 2023.02.09
XGBoost 요약  (0) 2019.12.06
처음해본 kaggle 도전기  (1) 2019.11.27
Custom EarlyStopping  (0) 2019.11.11
타이타닉 kaggle 자료 분석  (0) 2019.08.23

+ Recent posts