반응형

안드로이드 스튜디오 gradle에서 Gson 라이브러리 등록하는 방법입니다.

 

- 안으로이드 스튜디오에서 라이브러리 추가 방법

1. 라이브러리 추가

2. 검색

com.google.code.gson:gson:2.8.7

3. 해당 버전 확인 후 OK

1. 아래 사이트 접속.

2. build.gradle 에 Dependency 추가

3. Project Structure에서 라이브러리 적용

-끝-

 


1. https://mvnrepository.com/artifact/com.google.code.gson/gson

2. 원하는 버전선택

Gson 버전선택

3. Build Tool(빌드 관리 프로그램)을 선택

4. build.gradle의 dependancies에 추가

5. File -> Proejct Structure 들어가기

6. Dependencies 탭-> app -> Gson 선택 -> 적용(apply) -> OK

7. 코드 작성해보기

@Test
public void toSJON() {
    Gson g = new Gson();
    Circle a = new Circle(10f, 20f, 40f);
    String json = g.toJson(a);
    Circle b = g.fromJson(json, Circle.class);
    assertTrue(10f == b.getX());
    assertTrue(20f == b.getY());
    assertTrue(40f == b.getRadius());
}
반응형
반응형

완성된 코드입니다.

import android.content.Context
import android.view.inputmethod.InputMethodManager

val inputMethodManager = activity?.getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager

private fun hideKeyboard(inputMethodManager: InputMethodManager, view: View) {
  inputMethodManager.hideSoftInputFromWindow(view.windowToken, 0);
  view.clearFocus()
}

안드로이드 스튜디오를 이용해서 Bottom Navigation Activity를 생성하여 시작하였습니다.

 

안드로이드에서 엔터키 등을 누를 때, soft keyboard를 숨기려고 했는데 안되는 겁니다!

당연히 Keyboard라는 Utility 클래스가 있어서 Keyboard.hide()하면 될줄 알았습니다.

구글링 해보니 InputMethodManager.hideSoftInputFromWindow()를 실행해야 하더군요!

 

InputMethodManager imm=(InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);

방식이 제일 많이 사용되더군요.

 

하 지 만

코틀린에서는 activity.getSystemService()하는데 안되더군요...

InputMethodManager를 불러오기 위해선 activity가 있는지 모르기 때문에 activity?.getSystemService()을 사용할 수 있었습니다.

 

현재 foucs된 view를 가져오거나 윈도우 토큰을 이용해서 view를 주입하여 키보드를 닫아보았습니다.

import android.app.Activity

public static void hideKeyboard(Activity activity) {
  var imm = (InputMethodManager) activity?.getSystemService(Activity.INPUT_METHOD_SERVICE) as InputMethodManager
  var view = activity?.currentFocus
  if (view == null) {view = View(activity)}

  imm.hideSoftInputFromWindow(view.windowToken, 0);
}

오... 상식이 박살나 버렸습니다..

 

EditText에서는 작동하지 않는겁니다! 크흐 멋지다 안드로이드!

 

Fragment가 떠있는 동안에는 Fragment의 Activity를 EditText가 사용할 수 없다고 하네요. 하하하하 :)

더 망가지는 나의 코드~

 

또 한번의 삽을 프니..

Fragment에서 Context를 불러올 수 없는 겁니다 ㅠㅠ

INPUT_METHOD_SERVICE를 갖고있는 Context를 찾을 수가 없더군요..

 

키보드 하나 내리는데... Context와 View / Window가 필요하다니 뭐 조금 생각해보니. 이해는 갔습니다.

keyboard가 독립적으로 나오는것이 아니라는것에 좀 의아했죠.

public static void hideKeyboardFrom(Context context, View view) {
    InputMethodManager imm = context.getSystemService(Activity.INPUT_METHOD_SERVICE) as InputMethodManager
    imm.hideSoftInputFromWindow(view.getWindowToken(), 0);
}

아.. 파라미터 2개 생기고 넘나 아름답네요...


WindowsoftInputMode의 설정값

안드로이는 첫번째 EditText에 초기 포커스 자동적으로 할당하거나 Activity에 focusable을 할당합니다.

일반적으로 Input매쏘드에 따라 fouct이벤트가 반응해야 합니다.

AndroidManifest.xml에서 windowSoftInputMode의 stateAlwaysHidden으로 속성을 설정하면, 초기 포커스 설정이 무시됩니다.

<activity
  android:name=".MyActivity"
  android:windowSoftInputMode="stateAlwaysHidden"/>​

windowSoftInputMode세팅은 자동 focus 이벤트에만 적용되고, 터치 이벤트에 대해서는 적용 안 됩니다.

stateAlwaysHidden이라는 말보다는 ignoreInitalFocus가 훨신 어울리는 네이밍일텐데요.. 엄청 오해를 사게 만드네요.

 

윈도우 토큰을 얻는 다른 방법

view에 포커싱이 안된다면(Fragment를 바꾸었을 경우)

 if (view == null) view = View(activity) 대신에

 

view = root.windowToken

로 대체합니다.

 

키보드가 보이는 포커싱을 지우고 싶을 때(백그라운드에서 어플을 열경우)

매소드 맨 마지막줄에 추가해주세요

view.clearFocus();

stackoverflow.com/questions/1109022/how-do-you-close-hide-the-android-soft-keyboard-using-java?page=1&tab=votes#tab-top

 

How do you close/hide the Android soft keyboard using Java?

I have an EditText and a Button in my layout. After writing in the edit field and clicking on the Button, I want to hide the virtual keyboard when touching outside the keyboard. I assume that this ...

stackoverflow.com

위 글에서 투표수가 제일 많은 답변을 재미있게 바꾸어 보았습니다.

 

저도 2시간정도 소모했던 ㅠㅠ 삽질이였네요! 저처럼 시간버리는분이 없으셨길 바랍니다!

반응형
반응형

안드로이드 에뮬레이터 와이파이 및 3/4/5g이 인터넷에 연결이 안될 때 해결 방법입니다.

 

mac 터미널에 입력합니다.

/Users/<사용자명>/Library/Android/sdk/emulator/emulator @<에뮬레이터이름> -dns-server <dns.server.ip.address>

<~> <>사이의 내용은 사용자마다 다릅니다.

 

<에뮬레이터이름> 확인 방법

/Users/<사용자명>/Library/Android/sdk/emulator/emulator -list-avds

 

<dns.server.ip.address> 확인 방법

환경설정 -> 네트워크 -> Wi-Fi -> 고급 -> DNS

 


맥북 유저 입니다.

 

Android Studio에서 WebView를 만들고 Google사이트에 접속해 보았습니다.

 

그런데

net::ERR_NAME_NOT_RESOLVED

이러한 문구가 뜨는 겁니다!!!!

net::ERR_TIMED_OUT 화면

원인을 알아보니... 여러 경우가 있지만,
저의 경우는 인터넷이 연결되지 않은 경우 였습니다.

 

와이파이 연결표시가 있음에도 인터넷 연결안됨 이라는 글자가 나오더군요!

 

맥북의 인터넷과 안드로이드 인터넷이 다르다면서 흙흙 그래서 stack over flow를 뒤적뒤적했습니다.

 

stackoverflow.com/questions/44535500/internet-stopped-working-on-android-emulator-mac-os

 

Internet stopped working on Android Emulator (Mac OS)

I am using Android Studio 2.3(Latest). Till yesterday it was all good and working, today emulator is not connecting to the data network. I couldn't find any solution working so far. My Mac is runni...

stackoverflow.com

 

근본적인 해결책 보다는 꼼수라고하던데 저처럼 시간손해 보시지 않길 바랍니다.

반응형

+ Recent posts