volley 동작원리

  • 요청정보
    • 통신방식
    • url
    • 성공로직
    • 실패로직
  • 리퀘스트큐

 

 

 

 

 

 

 

 

 

 

내가 만든 서버로 넘기기 

새프로젝트 생성 - MyVolley02

 

 

앱 지우고 

서블렛으로 서버 만들기

 

결과

 

중요데이터는 POST 방식으로 보내야 한다

 

추가

            {
                // POST방식으로 데이터를 보내는 함수 getParams 작성 가능
                override fun getParams(): MutableMap<String, String>? {

                    // HashMap -> 보내고자 하는 데이터를 key - value 형태로 만들어줌
                    // HashMap<String, String> --> key : String, value : String
                    var params = HashMap<String, String>()
                    params.put("data","1232")
                    return params

                }
            }
  • post 방식으로 

 

 

 

 

 

 

정리

 

서버통신

1. 요청정보 만들기

(요청방식, 주소, 성공로직, 실패로직)

2. RequestQueue에 담아서 요청을 실행시킨다.

3. Get 방식으로 요청을 보낼때는 쿼리스트링 방식으로 데이터를 서버측으로 전달 할 수 있다.

4. POST 방식으로 요청을 보낼 때는 getParams라는 메소드를 만들어서 데이터를 서버측으로 전달 할 수 있다.

(HashMap 필수 --> 보내고자 하는 데이터를 key - value 형태로 만들어서 Params 객체에 저장해준다!)

5. 서버에서 다시 안드로이드로 응답을 보내줄 때는 get, post 둘 다 out객체(PrintWriter객체)를 통해서 응답을 보내준다.

(out.print("보내고자 하는 데이터"))

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  • 이미지에서 특징추출
  • 추출된 특징만을 통해서 어떤이미지인지 판단
  • 사람도 어떠한 부분적인 걸로 판단한다.

 

 

모델의 구성

 

기존

  • Dense 층 : MLP= 멀티레이어퍼셉트론
    • 분석하는 역할
    • 1차원만 가능

CNN 

  • input -> conv -> pool
  • conv, pool 층이 추가됨
  • 특징 추출 부 
    • 특징추출 역할
    • conv (컨볼루젼)
      • 특징찾기
      • 1층에서는 크게 보이는 특징 찾음
        • 뾰족한 귀, 눈, 입, 존재성
      • 살아남은 특징중에서 다음층 conv 에서 찾는다.
        • 좀더 세부적인 모양 - 입의 길이,
      •  
    • pooling
      • 특징아닌것 삭제
  • 분류 부
    •  Dense
      • 나온 특징들로 분석

제일먼저 찾는 눈에 보이는 큰 특징

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

지난 실습 

view 별로 id, text  변경해주기

plain Text 뷰는 html 의 input 태그속성처럼 placeholder 속성처럼 주고싶다면

속성 검색창에 hint 라고 검색!

입력전에 띄워주고싶은 문구를 작성!

나는 ID라고 작성하였다.

보기처럼 연한 회색 글씨로 ID라고 바껴있는걸 확인 할 수 있다.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

양방향 통신

자동으로 돌아와 주세영

 

 

 

 

새프로젝트 생성 MyIntent3

 

 

 

 

 

 

 

 

 

어댑터 뷰

뷰 그룹 안의 뷰들이 똑같은게 반복적인 것

 

 

중간 매개체를 통해서 띄울 수 있다.

 

  • 상하 스크롤 가능
  • 많은 양의 데이터 표현하고자 할 때 많이 사용 됨

 

새 프로젝트 생성 - MyListView

 

  • Legacy > ListView 추가

array 하나 생성 - myList

 

화면구성으로 와서 속성 entries에 @array/myList 넣어준다.

 

 

 

 

 

 

 

 

 

 

 

 

 

실습하기

새액티비티 추가

 

package com.example.mylistview

import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.widget.ArrayAdapter
import android.widget.Button
import android.widget.EditText
import android.widget.ListView

class MainActivity2 : AppCompatActivity() {

    lateinit var editPlus : EditText
    lateinit var btnPlus : Button

    lateinit var myList: ListView
    lateinit var dataArray : MutableList<String> // 데이터 셋
    // 바로 띄울 수 없으니 중간 매개체 생성

    // 어댑터 : 데이터를 하나의 항목으로 만들어 주는 것
    lateinit var myAdapter : ArrayAdapter<String>

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main2)

        editPlus = findViewById(R.id.editPlus)
        btnPlus = findViewById(R.id.btnPlus)

        myList = findViewById(R.id.myList)
        dataArray = mutableListOf()

        myAdapter = ArrayAdapter(this, android.R.layout.simple_list_item_1, dataArray)

        myList.adapter = myAdapter
        btnPlus.setOnClickListener{
            var inputData = editPlus.text.toString()
            dataArray.add(inputData)
            // notifyDataSetChanged() : 어댑터 갱신
            myAdapter.notifyDataSetChanged()
        }
    }
}

 

 

뷰가 여러개인 어댑터형식

 

새 프로젝트 생성

새 화면 생성

 

 

height 를 wrap_content

한 줄의 형식 만들었다

  • lateinit

 

 

커스텀 어댑터가 필요하다

 

클래스 생성

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

액티비티

  • 사용자에게 보여주는 한 화면의 단위

서비스

  • 멜론같이 돌아가게 도와주는 역할

방송수신자

  • 안드로이드 상태감지

콘텐츠 제공자

  • 데이터를 저장할 수 있는 역할

인텐트

  • 중간역할
  • 액티비티끼리의 화면전환에 필요한 기술

 

 

Activity 개요

 

 

Activity 생명주기

  • 각각 생명주기에 대한 메소드들이 따로 존재
  • 같이 만들어 볼 예정

 

 

새 프로젝트 생성 - MyIntent

 

 

textView 수정

 

onCreate() 는 메인 함수 역할

AppCompatActivity()

onStart() onResume() 기능을 알아서 실행시킨다

 

tag 어디서 출력된건지 기재

msg 출력할 메시지 작성

 

 

출력 결과

 

코드 전체

package com.example.myintent

import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.util.Log

class MainActivity : AppCompatActivity() {

    // AppCompatActivity --> 액티비티를 실행시킬 수 있는
    // 라이프 사이클과 관련된 메서드가 있다!
    private var Tag = "MainActivity"


    // onCreate() : xml에 있는 요소들을 클래스 파일에서 컨트롤 할 수 있도록 로딩해주는 역할
    // ---> 앱 실행시 단 한번만 실행되어진다!
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        Log.d(Tag,"onCreate 실행")
    }

    // onStart() : 화면에 띄워질 정보를 메모리에 저장
    override fun onStart() {
        super.onStart()

        Log.d(Tag,"onStart 실행")
    }

    // 실질적으로 사용자에게 화면을 보여주는 역할
    // 사용자와 상호작용 할 수 있도록 만들어줌
    override fun onResume() {
        super.onResume()
        Log.d(Tag, "onResume 실행")
    }

    // 어플이 일시 정지 되었을 때
    // --> 사용자 의도와는 다르게 어플이 일시 정지 되었을 때
    override fun onPause() {
        super.onPause()
        Log.d(Tag, "onPause 실행")
    }

    // 사용자 임의로 앱을 정지 시켰을 때! -> 종료가 아님 메모리상에 남아있음
    // 앱을 다시 구동할 수 있기 때문에 백그라운드 상태로 만들어 준다.
    override fun onStop() {
        super.onStop()
        Log.d(Tag, "onStop 실행")
    }

    // 메모리에 저장되어 있던 내용을 찾아서
    // 다시 사용자에게 보여주는 순서(onStart -> onResume)를 실행시켜줌
    override fun onRestart() {
        super.onRestart()
        Log.d(Tag, "onRestart 실행")

    }

    // 앱을 종료 시킬 때 사용되어짐! --> 메모리에 내용을 지움!
    override fun onDestroy() {
        super.onDestroy()
        Log.d(Tag, "onDestroy 실행")
    }
}

 

Intent 

  • 묵시적 인텐트 : 어떤 액션을 통해서 받은 액티비티 자체를 실행
    • 액션이 많이 붙음
  • 명시적 인텐트 : 개발자가 만든 다른 액티비티로 전환시킬 수 있는 것
    • 개발자가 만든 것

 

새 액티비티 생성

실습

버티컬 레이아웃 추가 -> 마법봉 클릭 

버튼 세개 추가

각각 id와 text 변경해준다

 

코드작성

 

웹페이지 이동하기

 

원래 바로 실행안되는데 안드로이드 버전이 업그레이드 되면서 허용되게 되었다.

기존 코드로는 아래 코드를 추가해준다

 

 

에뮬레이터 앱삭제

  • 앱 꾸욱 누르고, 드래그해서 Uninstall에 넣기, 메시지 뜨면 OK 누르기

 

카메라 기능

 

권한 허용 받게끔 알림

 

 

 

명시적 인텐트

 

내가 만든 액티비티로 이동하기

 

 

 

새프로젝트 생성 - MyIntent2

로그인 실습

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

+ Recent posts