7월, 2017의 게시물 표시

openConnection()은 네트워크 커넥션을 만들어주지 않는다!

이미지
링크: 안드로이드개발자 홈페이지 openConnection()메서드는 메서드 이름만을 봤을때, 네트워크 접속을 가능하게 해주는 메서드처럼 보인다. 하지만 이 메서드는 실제 네트워크 커넥션을 만들어주는 메서드가 아니다. 단지, http URL connection 인스턴스( URLConnection )를 만들어 리턴시켜주는 역할만을 한다. openConnection()메서드는네트워크 접속과 관련된 매개변수, 속성 등(url, 요청메서드 등)을 조작하게 해주고, 실제 접속은 connect()메서드가 실행되는 시점에서 이뤄지게된다. /** * This method returns the entire result from the HTTP response. * * @param url The URL to fetch the HTTP response from. * @return The contents of the HTTP response. * @throws IOException Related to network and stream reading */ public static String getResponseFromHttpUrl (URL url) throws IOException { HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection() ; try { InputStream in = urlConnection.getInputStream() ; Scanner scanner = new Scanner(in) ; scanner.useDelimiter( " \\ A" ) ; boolean hasInput = scanner.hasNext() ; if (hasInput) { return scanner.next() ; ...

TextView에 글자를 넣어주는 방법(setText, append)

TextView에 글자를 넣어주는 방법은 2가지가 있다. 많이 알려진 setText가 있고, append메서드 역시 사용될 수 있다. 두 메서드의 차이점은 다음과 같다. setText의 경우 메서드가 사용되면, 기존에 TextView에 있던 글자가 사라지고 새로운 텍스트로 대체된다. 반면, append메서드의 경우 기존에있던 text를 덮어쓰지 않고, 텍스트를 추가하게된다.

안드로이드 Min and Target 버전에 대하여

이미지
참고: 유다시티 안드로이드 1.0은 2008년에 출시되었고, 그 이후 총 13번의 주요 릴리즈 업데이트가 있었다. 각 릴리즈는 전통에 따라 달콤한 디저트이름으로 명명되었고, 이름은 알파벳 순서대로 정해졌다. 안드로이드 개발자 사이트 에 들어가면 현재 활성화되어있는 기기에 어떤 플랫폼 버전이 어떤 비율로 돌아가고있는지 확인해 볼 수 있다. 각 플랫폼 버전별 사용자 퍼센티지가 완벽하진 않지만, 종모양의 분포를 보이는걸 확인할 수 있다. x축 좌측에 위치한 오래된 버전의 플랫폼의 점유 퍼센티지가 급격히 낮은 이유는 디바이스의 업그레이드나 교체때문으로 해석할 수 있다. 중간쯤의 플랫폼 버전의 상대적으로 높은 사용자 점유 퍼센티지를 보이는데, 이 버전을 사용하고있는 디바이스는 2년정도 전에 출시된 디바이스이다. 가장 최신의 플랫폼은 출시된지 얼마안된 디바이스이거나 업그레이드를 통해 새로운 버전을 설치한 경우이다. minSDK에 대하여 minSDK는 내가 개발한 앱이 돌아갈수 있는 최소의 SDK버전을 의미한다. 어떤 버전을 선택하던 상관은 없다. 하지만 주의할점은 존재한다. minSDK를 설정하는것은 필터같이 작용하기 떄문이다. 내가 가진 스마트폰의 플랫폼 버전보다 더 높은 minSDK버전을 가진 어플리케이션은 구글플레이(구글 스토어)에 뜨지 않기 때문이다. 그럼 왜 minSDK를 1로 설정하고 개발하지 않는것일까? 최소 SDK버전을 1로 설정하면 누구나 구글스토어에서 나의 앱을 다운받을수 있음에도 불구하고 말이다. 일반적으로 앱 개발자들은 가능한한 많은 사용자를 대상으로 앱을 만든다. 하지만 낮은 버전의 플랫폼을 지원하는덴 비용상의 문제가 발생한다. API가 변경되거나 업데이트됨에 따른 실행 경로 재설정이나 기기별로 상이한 스펙으로 인한 UX변경 등 말이다. 타겟 디바이스를 넓게 잡는것과 넓어진 타겟 디바이스를 지원하기위한 비용을 잘 생각하고 균형을 맞춰야하는게 이 때문이다. 또 주의할 점은 각 버전이 출시될 떄마다 해당 버전이...

로컬에 저장된 Json파일로부터 데이터읽어오기(String으로 변환), 그리고 Array(JsonArray)에 저장하기

/** * Reads the JSON file and converts the JSON data to a { @link String}. * * @return A { @link String} representation of the JSON data. * @throws IOException if unable to read the JSON file. */ private String readJsonDataFromFile () throws IOException { InputStream inputStream = null; StringBuilder builder = new StringBuilder() ; try { String jsonDataString = null; inputStream = getResources().openRawResource(R.raw. menu_items_json ) ; BufferedReader bufferedReader = new BufferedReader( new InputStreamReader(inputStream , "UTF-8" )) ; while ((jsonDataString = bufferedReader.readLine()) != null ) { builder.append(jsonDataString) ; } } finally { if (inputStream != null ) { inputStream.close() ; } } return new String(builder) ; } /** * Adds { @link MenuItem}'s from a JSON file. */ private void addMenuItemsFromJson () { try { ...

안드로이드 어플리케이션에 광고넣기

자료 구글디벨로퍼블로그 구글 코드랩 (리사이클러뷰를 이용해 만든 앱에 광고넣기) -튜토리얼 동영상자료

API 요청 URL(URI) 만들기(조합하기) -Uri.Builder사용하기-

출처: Udacity API에 요청할 URL(URI)를 동적으로 만들어보자. Uri.Builder클래스 를 사용하였다. 일단 베이스 요청 URL을 정의한다. private static final String USGS_REQUEST_URL = "http://earthquake.usgs.gov/fdsnws/event/1/query" ; URL이 사용되는곳으로 가 Uri, Uri.Builder를 정의하고 사용하면된다. @Override public Loader<List<Earthquake>> onCreateLoader( int i, Bundle bundle) { SharedPreferences sharedPrefs = PreferenceManager.getDefaultSharedPreferences( this ); String minMagnitude = sharedPrefs.getString( getString(R. string .settings_min_magnitude_key), getString(R. string .settings_min_magnitude_default)); Uri baseUri = Uri.parse(USGS_REQUEST_URL); Uri.Builder uriBuilder = baseUri.buildUpon(); uriBuilder.appendQueryParameter( "format" , "geojson" ); uriBuilder.appendQueryParameter( "limit" , "10" ); uriBuilder.appendQueryParameter( "minmag" , minMagnitude); uriBuilder.appendQueryParame...

PreferenceScreen, Preference를 이용한 설정화면 만들기

이미지
출처: Udacity 사용자 인터페이스-설정(API가이드) 일단, 메뉴에서 쓰일 문자열을 string.xml에 정의해준다. <!-- Settings Menu Item [CHAR LIMIT=NONE] --> < string name = "settings_menu_item" > 세팅 </ string > <!-- Settings Activity Title [CHAR LIMIT=NONE] --> < string name = "settings_title" > 지진 규모 세팅 </ string > 다음으로 세팅을 주관할 SettingActivity클래스를 만들어준다. 내부클래스로 PreferenceFragment를 상속받은 커스텀 프래그먼트도 역시 구현해주도록 한다. 이 프래그먼트 안에 설정창이 들어가게된다. SettingActivity.java package com.example.android.quakereport; import android.os. Bundle ; import android.preference. PreferenceFragment ; import android.support.v7.app. AppCompatActivity ; public class SettingsActivity extends AppCompatActivity { @Override protected void onCreate( Bundle savedInstanceState) { super .onCreate(savedInstanceState); setContentView( R .layout.settings_activity); } public static class EarthquakePreferenceFragment extends PreferenceFragmen...