Tutorials - Coding in Flow

MVVM

https://s3-us-west-2.amazonaws.com/secure.notion-static.com/b981e1c2-6b03-4fee-ae56-2fea4e1ab203/Untitled.png

http 통신

https://s3-us-west-2.amazonaws.com/secure.notion-static.com/33f06977-1666-41e6-a114-c9ae719f0c05/Untitled.png

http 통신할 때 쓰는 것!!

통신대작전

http 통신 - 첫번째 방법

public class Test {
	
	String 통신() { // 데이터를 읽어들이는 로직을 함수로 따로 뺐음 -> 문자열을 리턴하는 함수
		URL url;
		try {
			url = new URL("<http://www.naver.com>");
			// conn : naver.com 에 연결된 바이트 스트림 -> 버퍼가 있어야 통신할 수 있어
			URLConnection conn = url.openConnection(); // 열어야함.
			
			// conn.getInputStream() : 바이트를 읽음
			// new InputStreamReader : 문자열로 읽음
			BufferedReader br = new BufferedReader(new InputStreamReader(conn.getInputStream()));
			
			return br.readLine(); // 이제 읽어들일건데 해당 페이지에 데이터가 얼마나 있는지 알 수 없으므로 while로 읽어야함
			
		} catch (Exception e) {
			e.printStackTrace();
		}
		return null;
		
	}

	public static void main(String[] args) throws Exception {
		String s = 통신(); // 1. 통신을 통해 받은 데이터 s를 onCreate()에 전달해서 그림을 그릴 수 있을까?
		// 안드로이드는 main thread 가 동작하면서 onCreate()를 때린다
		onCreate(); // -> main thread 가 그림을 그린다
		// 2. 메인 스레드는 통신해! 하고 나서 s에 null을 집어넣는다. 
		// -> cpu가 통신 실행(메모리한테 줌)하고 나서 return 하려고 하니 당연히 null
		// 그러고 onCreate 실행됨 -> 데이터 기반으로 그림을 그릴 수 없음
		
	}
}

http 통신 - 두번째 방법

public static void main(String[] args) throws Exception {
		onCreate(); // 2. 그림이 이미  다 그려짐 3. 다 그려지고 통신()함
		// 4. 따라서 데이터가 다 안채워져있음 -> 데이터 없이 그림그림 
		// -> 데이터가 필요한 영역은 엑박이 뜰것이야
		// 아까처럼하면? 데이터가 null 일거고....뭐든 의미가 없음
		// (또) 따라서 얘네를 ***비동기 통신으로 바꿔줘야함***
		String s = 통신(); // 1. 그래서 항상 통신이 onCreate 다음에 온다. 또는 onCreate 가 함수 내부에 있던지
		// 안드로이드도 생명주기가 있다. main에서 딱딱 실행을 해줌

	}