어댑터에 context를 전달하고 context에서 getSystemService를 호출한다

이거 찾는데 30분 헤멘듯,,

원래대로 하면 Create function 'getSystemService' 오류가 나온다

//올리기
val imm:InputMethodManager = mContext.getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager
imm.showSoftInput(holder.distance_input, InputMethodManager.SHOW_FORCED)

//숨기기
val imm:InputMethodManager = mContext.getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager
imm.hideSoftInputFromWindow(EditText이름.windowToken,0)

 

일반 엑티비티에서는

//올리기
val imm:InputMethodManager = getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager
imm.showSoftInput(holder.distance_input, InputMethodManager.SHOW_FORCED)

//숨기기
val imm:InputMethodManager = getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager
imm.hideSoftInputFromWindow(this.windowToken,0)

--- 추가로

EditText 엔터시 다음 포커스 xml코드에 밑에 옵션 추가하고,

android:imeOptions="actionDone"
android:inputType="text"
android:maxLines="1"

코틀린 파일에 다음을 추가

override fun onEditorAction(p0: TextView?, p1: Int, p2: KeyEvent?): Boolean {
    if(p1==EditorInfo.IME_ACTION_DONE){
    	//옵션입력
    }

 

안드로이드 로컬저장소에서 Branch 로 백업을 저장해놓고 관리를 하는데..

 

근데 최근에 sdk 버전이랑 gradle을 죄다 뜯어 고쳤었음.

 

그러던 와중에 별생각없이 임시로 만들어놨던 branch 확인차 check out 눌렀는데

 

뭔 이상한 창이 떠가지고 smart change인가? 뭐 눌렀음

 

 

와 근데 임시 branch 파일로 싹다 바뀌면서

 

최근 2주간 작업한거 싹다 날라가가지고 진짜 머리 하얗게되면서 화가나더라,, 울고싶었다 진짜

 

근데 안드로이드가 다행인게 Local History 기능이 있었음.. (진짜 이거 만든사람 사랑해요ㅎㅎ)

 

파일/폴더 - 우클릭 - Local History - show History를 누르면

여기 왼쪽에 바꾸기전 항목이 남아있음

 

폴더 눌러서 Revert 했는데 그안에 일부파일은 뭔가 꼬였는지 개별적으로 다시 해줌.

 

와 아무튼 진짜,, 속에 울분 터지는 느낌.. 미칠뻔..

 

 

블로그에 정리해놓을거 너무 많은데 회사일정이랑 시험기간 겹치면서 요새 너무 빠쁨..ㅠㅠ

 

멘탈 추스릴 겸 잠깐 쉴겸 올려놓고 감

 

2022.02.04 - [임베디드[C | Python]] - [라즈베리파이] opencv 설치 오류 해결함

 

[라즈베리파이] opencv 설치 오류 해결함

2022.02.04 - [임베디드[C | Python]] - [라즈베리파이] pip3 install killed 2022.02.04 - [임베디드[C | Python]] - [라즈베리파이] Mediapipe 활용해서 opencv 설치하기 하루종일 삽질하다가 여기까지왔네.. 라..

student-develop.tistory.com

전에 opencv numpy 설치안되서 한참 헤맸었는데

라즈베리 3B에서 유선으로 인터넷연결하고 2시간 가까이 기다리니까 

설치가 되었음.. 오래걸리는걸 안되는줄 알고 혼자 삽질하였음

 

아무튼 오됬네하고 켜지면서 카메라를 실행하려고 하니

 

(python3:2306): GLib-GObject-WARNING **: 10:38:58.937: cannot register existing type 'GdkDisplayManager'
(python3:2306): GLib-CRITICAL **: 10:38:58.938: g_once_init_leave: assertion 'result != 0' failed
(python3:2306): GLib-GObject-CRITICAL **: 10:38:58.939: g_object_new_with_properties: assertion 'G_TYPE_IS_OBJECT (object_type)' failed

 

에러가 떳음..

 

sudo vi /etc/xdg/qt5ct/qt5ct.conf

style=gtk2 >> style=gtk3

으로 고치니까 바로됨.

 

++++ 참고

시스템 실행시 자동으로 motion라이브러리로 스트리밍 서버를 실행시켰더니

해당 프로그램에서 카메라를 인지 못하였음.

실행중인 서버 종료하고 확인해보니 잘됨. 

 

카메라를 한 프로세스에서 사용중이면, 다른 프로세스는 알지 못한다!

프로토타입에서는 서버와 데이터 주고받는걸 volley라이브러리로 통신했었는데,

kotlin으로 마이그레이션 중 한참 해맸다..

DB에서 데이터를 파싱한다음 JSON으로 안드로이드에 전달하는 방법

 

아래 링크는 참고한 사이트!

https://velog.io/@ywown/kotlin-%ED%86%B5%EC%8B%A0-%EB%9D%BC%EC%9D%B4%EB%B8%8C%EB%9F%AC%EB%A6%ACVolley-Retrofit

 

[kotlin] 통신 라이브러리(Volley, Retrofit)

안드로이드 HTTP 통신 라이브러리인 Volley와 Retrofit의 사용방법, 그리고 Retrofit Annotation에 대해 정리한 내용입니다.

velog.io

/// JAVA 코드

Java StringRequest 클래스

public class ApiRequest extends StringRequest {
    final static private String URL = "";
    private Map<String, String> parameters;

    public ApiRequest(String carNum, String svcCode, String insttCode, Response.Listener<String> listener) {
        super(Method.POST, URL, listener, null);
        parameters = new HashMap<>();
        parameters.put("carNum", carNum);
    }
    @Override
    protected Map<String, String> getParams() throws AuthFailureError {
        return parameters;
    }
}

Java Volley사용 예제

btn_carinfo.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        String carNum = carNumText.getText().toString();
        if (carNum.isEmpty()) {
            Toast.makeText(getApplicationContext(), " ", Toast.LENGTH_SHORT).show();
            return;
        }
        String URL = "";
        StrictMode.enableDefaults();

        Response.Listener<String> responseListener = new Response.Listener<String>() {
            @Override
            public void onResponse(String response) {
                try {
                    JSONObject jsonData = new JSONObject(response); //json 객체 받아오기
                    JSONArray jsonArray = jsonData.getJSONArray(carNum); //받아온객체 jsondata변환 // DB에서 가져오도록 변경해야됨
                    jsonData = jsonArray.getJSONObject(0); //
                    
                    );
                    Toast.makeText(getApplicationContext(), "인증 성공", Toast.LENGTH_SHORT).show();

                } catch (JSONException e) {
                    Toast.makeText(getApplicationContext(), "데이터 호출 실패", Toast.LENGTH_SHORT).show();
                    e.printStackTrace();
                }
            }
        };
        dbRequest dbrequest = new dbRequest(carNum, URL, responseListener);
        RequestQueue queue = Volley.newRequestQueue(MainActivity.this);
        queue.add(dbrequest);
    }
});

 

 

//////// KOTLIN 코드

1. StringRequest 람다함수

val StringRequest = object : StringRequest(
    Request.Method.POST,
    getText(R.string.DataBaseURL).toString(),
    Response.Listener<String> { response ->
        Log.d("apiTestRes", "${response}")
        val jsonObject = JSONObject(response)
        val jsonArray = jsonObject.getJSONArray(carNum)
        val jsonData = jsonArray.getJSONObject(0)


    },
    Response.ErrorListener { error ->
        Log.d("apiTest", "error......$error")
    }) {

    @Throws(AuthFailureError::class)
    override fun getParams(): MutableMap<String, String>? {
        val params: MutableMap<String, String> = HashMap()
        params["carNum"] = carNum
        return params
    }
}

 

2. JSONRequest 람다함수

val JsonCarinfoRequest = object : JsonObjectRequest(
    Request.Method.POST,
    getText(R.string.DataBaseURL).toString(),
    null,
    Response.Listener<JSONObject> { response ->
        val jsonArray = response.getJSONArray(carNum)
        val jsonData = jsonArray.getJSONObject(0)

        Log.d("apiTestRes", "${response}")
        Log.d("apiTestNm", "${carNum}")
    },
    Response.ErrorListener { error ->
        Log.d("apiTest", "error......$error")
    }) {

    @Throws(AuthFailureError::class)
    override fun getParams(): Map<String, String>? {
        val params: MutableMap<String, String> = HashMap()
        params["carNum"] = carNum
        return params
    }
}

 

KOTLIN 사용예제

val queue = Volley.newRequestQueue(this)
queue.add(StringRequest) // 선언한 Request 추가

 

++++ 참고

기존에 DB데이터를 배열로 선언한 다음, PHP json_decode를 사용하여 화면에 출력,

해당 Response를 안드로이드에서 사용하였음.

 

하지만 JSONRequest를 사용할 때 HTML태그가 인식되어 

com.android.volley.ParseError: org.json.JSONException:

에러가 발생해서 한참 해맸었는데....

 

서버단에서 완전한 JSON타입으로 출력하던가,

이렇게 StringRequest로 받아와서 사용할 수 있음.

 

여기서는 PHP코드를 만들어놓은것도 있고,

시간상 JSON타입 출력은 추후 다시 만들던가 하고

실제 API에서 JSON타입으로 제공한다면 JSONObject 사용가능ㅎㅎ

+ Recent posts