+ All Categories
Home > Technology > Muni android-18-5-2012

Muni android-18-5-2012

Date post: 03-Jul-2015
Category:
Upload: ondraz
View: 234 times
Download: 5 times
Share this document with a friend
205
Android 2 Ondra Zahradník MUNI - 18.5.2012 Tuesday, March 19, 13
Transcript
Page 1: Muni android-18-5-2012

Android 2Ondra Zahradník

MUNI - 18.5.2012

Tuesday, March 19, 13

Page 2: Muni android-18-5-2012

Agenda

Tuesday, March 19, 13

nejdrive trochu teorie, potom prakticky prikladprvni dva priklady se tykaji UI, druhe dva pak programovanibehem prikladu budu obchazet a pomahat

Page 3: Muni android-18-5-2012

Agenda

1.Rekapitulace z minula

Tuesday, March 19, 13

nejdrive trochu teorie, potom prakticky prikladprvni dva priklady se tykaji UI, druhe dva pak programovanibehem prikladu budu obchazet a pomahat

Page 4: Muni android-18-5-2012

Agenda

1.Rekapitulace z minula2.BroadcastReceiver

Tuesday, March 19, 13

nejdrive trochu teorie, potom prakticky prikladprvni dva priklady se tykaji UI, druhe dva pak programovanibehem prikladu budu obchazet a pomahat

Page 5: Muni android-18-5-2012

Agenda

1.Rekapitulace z minula2.BroadcastReceiver3.Podpora různých zařízení

Tuesday, March 19, 13

nejdrive trochu teorie, potom prakticky prikladprvni dva priklady se tykaji UI, druhe dva pak programovanibehem prikladu budu obchazet a pomahat

Page 6: Muni android-18-5-2012

Agenda

1.Rekapitulace z minula2.BroadcastReceiver3.Podpora různých zařízení4.Dynamické UI pomocí fragmentů

Tuesday, March 19, 13

nejdrive trochu teorie, potom prakticky prikladprvni dva priklady se tykaji UI, druhe dva pak programovanibehem prikladu budu obchazet a pomahat

Page 7: Muni android-18-5-2012

Agenda

1.Rekapitulace z minula2.BroadcastReceiver3.Podpora různých zařízení4.Dynamické UI pomocí fragmentů5.Přestávka

Tuesday, March 19, 13

nejdrive trochu teorie, potom prakticky prikladprvni dva priklady se tykaji UI, druhe dva pak programovanibehem prikladu budu obchazet a pomahat

Page 8: Muni android-18-5-2012

Agenda

1.Rekapitulace z minula2.BroadcastReceiver3.Podpora různých zařízení4.Dynamické UI pomocí fragmentů5.Přestávka6.Architektura typické aplikace

Tuesday, March 19, 13

nejdrive trochu teorie, potom prakticky prikladprvni dva priklady se tykaji UI, druhe dva pak programovanibehem prikladu budu obchazet a pomahat

Page 9: Muni android-18-5-2012

Agenda

1.Rekapitulace z minula2.BroadcastReceiver3.Podpora různých zařízení4.Dynamické UI pomocí fragmentů5.Přestávka6.Architektura typické aplikace7.Otázky a odpovědi

Tuesday, March 19, 13

nejdrive trochu teorie, potom prakticky prikladprvni dva priklady se tykaji UI, druhe dva pak programovanibehem prikladu budu obchazet a pomahat

Page 10: Muni android-18-5-2012

House-keeping notes

•slajdy - http://goo.gl/QiFDy

•zdroje - http://goo.gl/QH5J7

•vaše otázky

Tuesday, March 19, 13

Page 11: Muni android-18-5-2012

Rekapitulace z minula

1.Android SDK2.Eclipse + ADT3.Emulátor / device4.Založení nového projektu5.Struktura Android projektu6.Activity, layout, Intent = UI7.Kompilace a spuštění8.Debugging

Tuesday, March 19, 13

Page 12: Muni android-18-5-2012

Broadcasty

Tuesday, March 19, 13

aplikaci to i probudívykonat rychlou akci (limit 10s)mozno broadcasty radit i stopnout

Page 13: Muni android-18-5-2012

Broadcasty

•Aplikace reaguje na důležité události

Tuesday, March 19, 13

aplikaci to i probudívykonat rychlou akci (limit 10s)mozno broadcasty radit i stopnout

Page 14: Muni android-18-5-2012

Broadcasty

•Aplikace reaguje na důležité události

•Boot, SMS, Call, připojení, čas...

Tuesday, March 19, 13

aplikaci to i probudívykonat rychlou akci (limit 10s)mozno broadcasty radit i stopnout

Page 15: Muni android-18-5-2012

Broadcasty

•Aplikace reaguje na důležité události

•Boot, SMS, Call, připojení, čas...

•BroadcastReceiver

Tuesday, March 19, 13

aplikaci to i probudívykonat rychlou akci (limit 10s)mozno broadcasty radit i stopnout

Page 16: Muni android-18-5-2012

Broadcasty

•Aplikace reaguje na důležité události

•Boot, SMS, Call, připojení, čas...

•BroadcastReceiver<receiver android:name=".SMSReceiver">

<intent-filter > <action android:name="android.provider.Telephony.SMS_RECEIVED" />

</intent-filter></receiver>

Tuesday, March 19, 13

aplikaci to i probudívykonat rychlou akci (limit 10s)mozno broadcasty radit i stopnout

Page 17: Muni android-18-5-2012

Broadcasty

•Aplikace reaguje na důležité události

•Boot, SMS, Call, připojení, čas...

•BroadcastReceiver<receiver android:name=".SMSReceiver">

<intent-filter > <action android:name="android.provider.Telephony.SMS_RECEIVED" />

</intent-filter></receiver>

public class SMSReceiver extends BroadcastReceiver { @Override public void onReceive(Context ctx, Intent i) { //TODO do something }}

Tuesday, March 19, 13

aplikaci to i probudívykonat rychlou akci (limit 10s)mozno broadcasty radit i stopnout

Page 18: Muni android-18-5-2012

Broadcasty

•Aplikace reaguje na důležité události

•Boot, SMS, Call, připojení, čas...

•BroadcastReceiver

•Možno definovat vlastní

<receiver android:name=".SMSReceiver"><intent-filter > <action android:name="android.provider.Telephony.SMS_RECEIVED" />

</intent-filter></receiver> public class SMSReceiver extends BroadcastReceiver {

@Override public void onReceive(Context ctx, Intent i) { //TODO do something }}

Tuesday, March 19, 13

aplikaci to i probudívykonat rychlou akci (limit 10s)mozno broadcasty radit i stopnout

Page 19: Muni android-18-5-2012

Broadcasty

•Aplikace reaguje na důležité události

•Boot, SMS, Call, připojení, čas...

•BroadcastReceiver

•Možno definovat vlastní

•globální

<receiver android:name=".SMSReceiver"><intent-filter > <action android:name="android.provider.Telephony.SMS_RECEIVED" />

</intent-filter></receiver> public class SMSReceiver extends BroadcastReceiver {

@Override public void onReceive(Context ctx, Intent i) { //TODO do something }}

Tuesday, March 19, 13

aplikaci to i probudívykonat rychlou akci (limit 10s)mozno broadcasty radit i stopnout

Page 20: Muni android-18-5-2012

Broadcasty

•Aplikace reaguje na důležité události

•Boot, SMS, Call, připojení, čas...

•BroadcastReceiver

•Možno definovat vlastní

•globální•lokální - notifikační systém uvnitř appky,

levné

<receiver android:name=".SMSReceiver"><intent-filter > <action android:name="android.provider.Telephony.SMS_RECEIVED" />

</intent-filter></receiver> public class SMSReceiver extends BroadcastReceiver {

@Override public void onReceive(Context ctx, Intent i) { //TODO do something }}

Tuesday, March 19, 13

aplikaci to i probudívykonat rychlou akci (limit 10s)mozno broadcasty radit i stopnout

Page 21: Muni android-18-5-2012

Příklad

Tuesday, March 19, 13

Page 22: Muni android-18-5-2012

Příklad

•Vypište číslo a text příchozí sms v toastu

Tuesday, March 19, 13

Page 23: Muni android-18-5-2012

Příklad

•Vypište číslo a text příchozí sms v toastu

•Toast - http://goo.gl/WoTk

Tuesday, March 19, 13

Page 24: Muni android-18-5-2012

Příklad

•Vypište číslo a text příchozí sms v toastu

•Toast - http://goo.gl/WoTk•Oprávnění android.permission.RECEIVE_SMS

Tuesday, March 19, 13

Page 25: Muni android-18-5-2012

Příklad

•Vypište číslo a text příchozí sms v toastu

•Toast - http://goo.gl/WoTk•Oprávnění android.permission.RECEIVE_SMS•SMS Intent - extra “pdus” seznam smsek

Tuesday, March 19, 13

Page 26: Muni android-18-5-2012

Příklad

•Vypište číslo a text příchozí sms v toastu

•Toast - http://goo.gl/WoTk•Oprávnění android.permission.RECEIVE_SMS•SMS Intent - extra “pdus” seznam smsek•SmsMessage.createFromPdu

Tuesday, March 19, 13

Page 27: Muni android-18-5-2012

Příklad

•Vypište číslo a text příchozí sms v toastu

•Toast - http://goo.gl/WoTk•Oprávnění android.permission.RECEIVE_SMS•SMS Intent - extra “pdus” seznam smsek•SmsMessage.createFromPdu

•SMS lze posílat z DDMS do emulátoru

Tuesday, March 19, 13

Page 28: Muni android-18-5-2012

Příklad

•Vypište číslo a text příchozí sms v toastu

•Toast - http://goo.gl/WoTk•Oprávnění android.permission.RECEIVE_SMS•SMS Intent - extra “pdus” seznam smsek•SmsMessage.createFromPdu

•SMS lze posílat z DDMS do emulátoru

•zdrojáky - muni-android-hello

Tuesday, March 19, 13

Page 29: Muni android-18-5-2012

Různá zařízení

Tuesday, March 19, 13

Page 30: Muni android-18-5-2012

Různá zařízení

•deklarativně podadresáři v /res

Tuesday, March 19, 13

Page 31: Muni android-18-5-2012

Různá zařízení

•deklarativně podadresáři v /res

•defaultní a alternativní

Tuesday, March 19, 13

Page 32: Muni android-18-5-2012

Různá zařízení

•deklarativně podadresáři v /res

•defaultní a alternativní

dvě zařízeníjeden layout

Tuesday, March 19, 13

Page 33: Muni android-18-5-2012

Různá zařízení

•deklarativně podadresáři v /res

•defaultní a alternativní

dvě zařízeníjeden layout

jedno zařízenídva layouty

Tuesday, March 19, 13

Page 34: Muni android-18-5-2012

Zdroje a kvalifikátory

Tuesday, March 19, 13

Page 35: Muni android-18-5-2012

Zdroje a kvalifikátory

•Zdroje

Tuesday, March 19, 13

Page 36: Muni android-18-5-2012

Zdroje a kvalifikátory

•Zdroje

•texty, obrázky, layout, barvy,...

Tuesday, March 19, 13

Page 37: Muni android-18-5-2012

Zdroje a kvalifikátory

•Zdroje

•texty, obrázky, layout, barvy,...

MyProject/ src/ MyActivity.java res/ drawable/ icon.png layout/ main.xml info.xml values/ strings.xml

Tuesday, March 19, 13

Page 38: Muni android-18-5-2012

Zdroje a kvalifikátory

•Zdroje

•texty, obrázky, layout, barvy,...

•Kvalifikátory• jazyk (en_rUS, cs, ...)

MyProject/ src/ MyActivity.java res/ drawable/ icon.png layout/ main.xml info.xml values/ strings.xml

Tuesday, March 19, 13

Page 39: Muni android-18-5-2012

Zdroje a kvalifikátory

•Zdroje

•texty, obrázky, layout, barvy,...

•Kvalifikátory• jazyk (en_rUS, cs, ...)

• nejmenší šířka (sw720dp)

MyProject/ src/ MyActivity.java res/ drawable/ icon.png layout/ main.xml info.xml values/ strings.xml

Tuesday, March 19, 13

Page 40: Muni android-18-5-2012

Zdroje a kvalifikátory

•Zdroje

•texty, obrázky, layout, barvy,...

•Kvalifikátory• jazyk (en_rUS, cs, ...)

• nejmenší šířka (sw720dp)

• velikost obrazovky (small, normal, large, xlarge)

MyProject/ src/ MyActivity.java res/ drawable/ icon.png layout/ main.xml info.xml values/ strings.xml

Tuesday, March 19, 13

Page 41: Muni android-18-5-2012

Zdroje a kvalifikátory

•Zdroje

•texty, obrázky, layout, barvy,...

•Kvalifikátory• jazyk (en_rUS, cs, ...)

• nejmenší šířka (sw720dp)

• velikost obrazovky (small, normal, large, xlarge)

• orientace (land, port)

MyProject/ src/ MyActivity.java res/ drawable/ icon.png layout/ main.xml info.xml values/ strings.xml

Tuesday, March 19, 13

Page 42: Muni android-18-5-2012

Zdroje a kvalifikátory

•Zdroje

•texty, obrázky, layout, barvy,...

•Kvalifikátory• jazyk (en_rUS, cs, ...)

• nejmenší šířka (sw720dp)

• velikost obrazovky (small, normal, large, xlarge)

• orientace (land, port)

• hustota (ldpi, mdpi, hdpi, xhdpi)

MyProject/ src/ MyActivity.java res/ drawable/ icon.png layout/ main.xml info.xml values/ strings.xml

Tuesday, March 19, 13

Page 43: Muni android-18-5-2012

Zdroje a kvalifikátory

•Zdroje

•texty, obrázky, layout, barvy,...

•Kvalifikátory• jazyk (en_rUS, cs, ...)

• nejmenší šířka (sw720dp)

• velikost obrazovky (small, normal, large, xlarge)

• orientace (land, port)

• hustota (ldpi, mdpi, hdpi, xhdpi)

• layout, layout-land, layout-land-v13

• drawable, drawable-hdpi, drawable-xhdpi

MyProject/ src/ MyActivity.java res/ drawable/ icon.png layout/ main.xml info.xml values/ strings.xml

res/ drawable/ icon.png background.png drawable-hdpi/ icon.png background.png

Tuesday, March 19, 13

Page 44: Muni android-18-5-2012

Resource resolving

Tuesday, March 19, 13

Page 45: Muni android-18-5-2012

Resource resolving

Tuesday, March 19, 13

Page 46: Muni android-18-5-2012

Resource resolving

drawable/drawable-en/drawable-fr-rCA/drawable-en-port/drawable-en-notouch-12key/drawable-port-ldpi/drawable-port-notouch-12key/

Tuesday, March 19, 13

Page 47: Muni android-18-5-2012

Resource resolving

drawable/drawable-en/drawable-fr-rCA/drawable-en-port/drawable-en-notouch-12key/drawable-port-ldpi/drawable-port-notouch-12key/

Locale = en-GB Screen orientation = port Screen pixel density = hdpi Touchscreen type = notouch Primary text input method = 12key

Tuesday, March 19, 13

Page 48: Muni android-18-5-2012

Resource resolving

drawable/drawable-en/drawable-fr-rCA/drawable-en-port/drawable-en-notouch-12key/drawable-port-ldpi/drawable-port-notouch-12key/

Locale = en-GB Screen orientation = port Screen pixel density = hdpi Touchscreen type = notouch Primary text input method = 12key

drawable/drawable-en/drawable-fr-rCA/drawable-en-port/drawable-en-notouch-12key/drawable-port-ldpi/drawable-port-notouch-12key/

Tuesday, March 19, 13

Page 49: Muni android-18-5-2012

Resource resolving

drawable/drawable-en/drawable-fr-rCA/drawable-en-port/drawable-en-notouch-12key/drawable-port-ldpi/drawable-port-notouch-12key/

Locale = en-GB Screen orientation = port Screen pixel density = hdpi Touchscreen type = notouch Primary text input method = 12key

drawable/drawable-en/drawable-fr-rCA/drawable-en-port/drawable-en-notouch-12key/drawable-port-ldpi/drawable-port-notouch-12key/

drawable/drawable-en/drawable-en-port/drawable-en-notouch-12key/drawable-port-ldpi/drawable-port-notouch-12key/

Tuesday, March 19, 13

Page 50: Muni android-18-5-2012

Resource resolving

drawable/drawable-en/drawable-fr-rCA/drawable-en-port/drawable-en-notouch-12key/drawable-port-ldpi/drawable-port-notouch-12key/

Locale = en-GB Screen orientation = port Screen pixel density = hdpi Touchscreen type = notouch Primary text input method = 12key

drawable/drawable-en/drawable-fr-rCA/drawable-en-port/drawable-en-notouch-12key/drawable-port-ldpi/drawable-port-notouch-12key/

drawable/drawable-en/drawable-en-port/drawable-en-notouch-12key/drawable-port-ldpi/drawable-port-notouch-12key/

drawable-en/drawable-en-port/drawable-en-notouch-12key/

Tuesday, March 19, 13

Page 51: Muni android-18-5-2012

Různé obrazovky

Tuesday, March 19, 13

Page 52: Muni android-18-5-2012

•obrazovky small, normal, large, xlarge

Různé obrazovky

Tuesday, March 19, 13

Page 53: Muni android-18-5-2012

•obrazovky small, normal, large, xlarge

•wrap_content, match_parent •RelativeLayout

Různé obrazovky

Tuesday, March 19, 13

Page 54: Muni android-18-5-2012

•obrazovky small, normal, large, xlarge

•wrap_content, match_parent •RelativeLayout•9-patch

Různé obrazovky

Tuesday, March 19, 13

Page 55: Muni android-18-5-2012

•obrazovky small, normal, large, xlarge

•wrap_content, match_parent •RelativeLayout•9-patch

Různé obrazovky

Tuesday, March 19, 13

Page 56: Muni android-18-5-2012

•obrazovky small, normal, large, xlarge

•wrap_content, match_parent •RelativeLayout•9-patch

Různé obrazovky

Tuesday, March 19, 13

Page 57: Muni android-18-5-2012

Různé hustoty

Tuesday, March 19, 13

Page 58: Muni android-18-5-2012

•hustoty ldpi, mdpi, hdpi, xhdpi

Různé hustoty

Tuesday, March 19, 13

Page 59: Muni android-18-5-2012

•hustoty ldpi, mdpi, hdpi, xhdpi

Různé hustoty

Tuesday, March 19, 13

Page 60: Muni android-18-5-2012

•hustoty ldpi, mdpi, hdpi, xhdpi

Různé hustoty

• xhdpi: 2.0• hdpi: 1.5• mdpi: 1.0 (baseline)• ldpi: 0.75

Tuesday, March 19, 13

Page 61: Muni android-18-5-2012

•hustoty ldpi, mdpi, hdpi, xhdpi

Různé hustoty

• xhdpi: 2.0• hdpi: 1.5• mdpi: 1.0 (baseline)• ldpi: 0.75

MyProject/ res/ drawable-xhdpi/ awesomeimage.png drawable-hdpi/ awesomeimage.png drawable-mdpi/ awesomeimage.png drawable-ldpi/ awesomeimage.png

Tuesday, March 19, 13

Page 62: Muni android-18-5-2012

•hustoty ldpi, mdpi, hdpi, xhdpi

•dp = density independent pixel

Různé hustoty

• xhdpi: 2.0• hdpi: 1.5• mdpi: 1.0 (baseline)• ldpi: 0.75

MyProject/ res/ drawable-xhdpi/ awesomeimage.png drawable-hdpi/ awesomeimage.png drawable-mdpi/ awesomeimage.png drawable-ldpi/ awesomeimage.png

Tuesday, March 19, 13

Page 63: Muni android-18-5-2012

Podpora různých verzí

Tuesday, March 19, 13

Page 64: Muni android-18-5-2012

Podpora různých verzí

•Na trhu Android v2.1 - v4.0.3

Tuesday, March 19, 13

Page 65: Muni android-18-5-2012

<manifest xmlns:android="http://schemas.android.com/apk/res/android" ... >    <uses-sdk android:minSdkVersion="4" android:targetSdkVersion="15" />    ...</manifest>

Podpora různých verzí

•Na trhu Android v2.1 - v4.0.3

•Nastavit minSdkVersion a targetSdkVersion

Tuesday, March 19, 13

Page 66: Muni android-18-5-2012

Podpora různých verzí

•Na trhu Android v2.1 - v4.0.3

•Nastavit minSdkVersion a targetSdkVersion

•Kontrolovat verzi APIprivate void setUpActionBar() {    // Make sure we're running on Honeycomb or higher to use ActionBar APIs    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {        ActionBar actionBar = getActionBar();        actionBar.setDisplayHomeAsUpEnabled(true);    }}

Tuesday, March 19, 13

Page 67: Muni android-18-5-2012

Příklad

•Rozšiřte příklad kalkulačky z minulé přednášky o podporu češtiny a landscape režimu

•zdrojáky, ze kterých lze vyjít

•muni-android-hello

•dokumentace

•http://goo.gl/RKihT

Tuesday, March 19, 13

Page 68: Muni android-18-5-2012

Dynamické UI pomocí fragmentů

•Fragment je kus funkčního UI

•Aktivita hostí fragmenty

•Jedna aplikace pro telefon i tablet

Tuesday, March 19, 13

Page 69: Muni android-18-5-2012

Fragment

Tuesday, March 19, 13

Page 70: Muni android-18-5-2012

Fragment

Tuesday, March 19, 13

Page 71: Muni android-18-5-2012

Fragment

Fragment a jeho UIpublic class ArticleFragment extends Fragment {    @Override    public View onCreateView(LayoutInflater inflater, ViewGroup container,         Bundle savedInstanceState) {        // Inflate the layout for this fragment        return inflater.inflate(R.layout.article_view, container, false);    }}

Tuesday, March 19, 13

Page 72: Muni android-18-5-2012

Fragment

Fragment a jeho UI

Layout

public class ArticleFragment extends Fragment {    @Override    public View onCreateView(LayoutInflater inflater, ViewGroup container,         Bundle savedInstanceState) {        // Inflate the layout for this fragment        return inflater.inflate(R.layout.article_view, container, false);    }}

<fragment android:name="com.example.android.fragments.ArticleFragment"              android:id="@+id/article_fragment"              android:layout_weight="2"              android:layout_width="0dp"              android:layout_height="match_parent" />

Tuesday, March 19, 13

Page 73: Muni android-18-5-2012

Fragment

Fragment a jeho UI

Layout

Instance

public class ArticleFragment extends Fragment {    @Override    public View onCreateView(LayoutInflater inflater, ViewGroup container,         Bundle savedInstanceState) {        // Inflate the layout for this fragment        return inflater.inflate(R.layout.article_view, container, false);    }}

<fragment android:name="com.example.android.fragments.ArticleFragment"              android:id="@+id/article_fragment"              android:layout_weight="2"              android:layout_width="0dp"              android:layout_height="match_parent" />

public class MainActivity extends FragmentActivity {    @Override    public void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.news_articles);    }}

Tuesday, March 19, 13

Page 74: Muni android-18-5-2012

Fragmenty na telefonu a tabletu

Tuesday, March 19, 13

Page 75: Muni android-18-5-2012

Fragmenty na telefonu a tabletu

Tuesday, March 19, 13

Page 76: Muni android-18-5-2012

Fragmenty na telefonu a tabletu

<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  android:orientation="horizontal"  android:layout_width="match_parent"  android:layout_height="match_parent"  android:id="@+id/frags">    <!-- "Fragment A" -->  <fragment class="com.example.android.TitlesFragment"            android:id="@+id/list_frag"            android:layout_width="@dimen/titles_size"            android:layout_height="match_parent"/>    <!-- "Fragment B" -->  <fragment class="com.example.android.DetailsFragment"            android:id="@+id/details_frag"            android:layout_width="match_parent"            android:layout_height="match_parent" /></LinearLayout>

Tuesday, March 19, 13

Page 77: Muni android-18-5-2012

Fragmenty na telefonu a tabletu

<?xml version="1.0" encoding="utf-8"?><FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:layout_width="match_parent"    android:layout_height="match_parent">    <!-- "Fragment A" -->    <fragment class="com.example.android.TitlesFragment"              android:id="@+id/list_frag"              android:layout_width="match_parent"              android:layout_height="match_parent"/></FrameLayout>

Tuesday, March 19, 13

Page 78: Muni android-18-5-2012

Fragmenty na telefonu a tabletu

public class MainActivity extends Activity implements TitlesFragment.OnItemSelectedListener {    public void onItemSelected(int position) {        DisplayFragment displayFrag = (DisplayFragment) getFragmentManager()                                    .findFragmentById(R.id.display_frag);        if (displayFrag == null) {            // DisplayFragment (Fragment B) is not in the layout (handset layout),            // so start DisplayActivity (Activity B)            // and pass it the info about the selected item            Intent intent = new Intent(this, DisplayActivity.class);            intent.putExtra("position", position);            startActivity(intent);        } else {            // DisplayFragment (Fragment B) is in the layout (tablet layout),            // so tell the fragment to update            displayFrag.updateContent(position);        }    }}

Tuesday, March 19, 13

Page 79: Muni android-18-5-2012

Komunikace mezi fragmenty

Tuesday, March 19, 13

Page 80: Muni android-18-5-2012

Komunikace mezi fragmenty

Tuesday, March 19, 13

Page 81: Muni android-18-5-2012

Komunikace mezi fragmenty

•FragmentA definuje Listener interface

Tuesday, March 19, 13

Page 82: Muni android-18-5-2012

Komunikace mezi fragmenty

•FragmentA definuje Listener interface

•Activity interface implementuje

Tuesday, March 19, 13

Page 83: Muni android-18-5-2012

Komunikace mezi fragmenty

•FragmentA definuje Listener interface

•Activity interface implementuje

•FragmentA volá callback onItemSelected(...)

Tuesday, March 19, 13

Page 84: Muni android-18-5-2012

Nové API na starých Androidech

•support lib. zpřístupňuje nové api pro staré devices

•Fragment, Loader

•ViewPager, accessibility, NotificationBuilder,...

•ActionBarSherlock

•Animations

import android.support.v4.app.Fragment;import android.support.v4.app.FragmentManager;...

Tuesday, March 19, 13

Page 85: Muni android-18-5-2012

Příklad

•do seznamu přidejte možnost změnit položku

•změnu potvrďte FragmentDialogem

•zdrojáky

•http://goo.gl/NmK4o

•dokumentace

•http://goo.gl/tuZwX•http://goo.gl/bK5GQ

Tuesday, March 19, 13

Page 86: Muni android-18-5-2012

Přestávka

Tuesday, March 19, 13

Page 87: Muni android-18-5-2012

Architektura typické aplikace 1

•Zobraz seznam položek z databáze

Tuesday, March 19, 13

Page 88: Muni android-18-5-2012

Architektura typické aplikace 1

•Zobraz seznam položek z databáze

ListFragment

Tuesday, March 19, 13

Page 89: Muni android-18-5-2012

Architektura typické aplikace 1

•Zobraz seznam položek z databáze

ListFragment DBčte data

Tuesday, March 19, 13

Page 90: Muni android-18-5-2012

Architektura typické aplikace 1

•Zobraz seznam položek z databáze

ListFragment DBčte data

sql

Tuesday, March 19, 13

Page 91: Muni android-18-5-2012

Architektura typické aplikace 1

•Zobraz seznam položek z databáze

ListFragment DBčte data

sql

UI

Tuesday, March 19, 13

Page 92: Muni android-18-5-2012

Architektura typické aplikace 1

•Zobraz seznam položek z databáze

ListFragment DBčte data

sql

UI Model

Tuesday, March 19, 13

Page 93: Muni android-18-5-2012

Databáze

Tuesday, March 19, 13

nefunguji cizí klíčecasto implementovan jako singleton

Page 94: Muni android-18-5-2012

Databáze

•SQLite v3 databáze

Tuesday, March 19, 13

nefunguji cizí klíčecasto implementovan jako singleton

Page 95: Muni android-18-5-2012

Databáze

•SQLite v3 databáze

•SQLiteOpenHelper

Tuesday, March 19, 13

nefunguji cizí klíčecasto implementovan jako singleton

Page 96: Muni android-18-5-2012

Databáze

•SQLite v3 databáze

•SQLiteOpenHelper

•stará se o life-cycle databáze

Tuesday, March 19, 13

nefunguji cizí klíčecasto implementovan jako singleton

Page 97: Muni android-18-5-2012

Databáze

•SQLite v3 databáze

•SQLiteOpenHelper

•stará se o life-cycle databáze•callbacky pro vytvoření a upgrade

Tuesday, March 19, 13

nefunguji cizí klíčecasto implementovan jako singleton

Page 98: Muni android-18-5-2012

Databáze

•SQLite v3 databáze

•SQLiteOpenHelper

•stará se o life-cycle databáze•callbacky pro vytvoření a upgrade

• onCreate() a onUpgrade()

Tuesday, March 19, 13

nefunguji cizí klíčecasto implementovan jako singleton

Page 99: Muni android-18-5-2012

Databáze

•SQLite v3 databáze

•SQLiteOpenHelper

•stará se o life-cycle databáze•callbacky pro vytvoření a upgrade

• onCreate() a onUpgrade()•zpřístupňuje interface databáze

Tuesday, March 19, 13

nefunguji cizí klíčecasto implementovan jako singleton

Page 100: Muni android-18-5-2012

Databáze

•SQLite v3 databáze

•SQLiteOpenHelper

•stará se o life-cycle databáze•callbacky pro vytvoření a upgrade

• onCreate() a onUpgrade()•zpřístupňuje interface databáze• getWritableDatabase()

Tuesday, March 19, 13

nefunguji cizí klíčecasto implementovan jako singleton

Page 101: Muni android-18-5-2012

Databáze

•SQLite v3 databáze

•SQLiteOpenHelper

•stará se o life-cycle databáze•callbacky pro vytvoření a upgrade

• onCreate() a onUpgrade()•zpřístupňuje interface databáze• getWritableDatabase()

• db.query(), db.insert (), db.update (), db.delete ()

Tuesday, March 19, 13

nefunguji cizí klíčecasto implementovan jako singleton

Page 102: Muni android-18-5-2012

Databáze

•SQLite v3 databáze

•SQLiteOpenHelper

•stará se o life-cycle databáze•callbacky pro vytvoření a upgrade

• onCreate() a onUpgrade()•zpřístupňuje interface databáze• getWritableDatabase()

• db.query(), db.insert (), db.update (), db.delete ()

• db.beginTransaction(), db.setTransactionSuccessful(), db.endTransaction()

Tuesday, March 19, 13

nefunguji cizí klíčecasto implementovan jako singleton

Page 103: Muni android-18-5-2012

Cursor

Tuesday, March 19, 13

optimalizovane dotazy do databaze

Page 104: Muni android-18-5-2012

Cursor

•zpřístupňuje řádky výsledku db.query()

Tuesday, March 19, 13

optimalizovane dotazy do databaze

Page 105: Muni android-18-5-2012

Cursor

•zpřístupňuje řádky výsledku db.query()

•metody pro pohyb

Tuesday, March 19, 13

optimalizovane dotazy do databaze

Page 106: Muni android-18-5-2012

Cursor

•zpřístupňuje řádky výsledku db.query()

•metody pro pohyb• moveToFirst(), moveToNext(), getCount()

Tuesday, March 19, 13

optimalizovane dotazy do databaze

Page 107: Muni android-18-5-2012

Cursor

•zpřístupňuje řádky výsledku db.query()

•metody pro pohyb• moveToFirst(), moveToNext(), getCount()

•metody pro čtení

Tuesday, March 19, 13

optimalizovane dotazy do databaze

Page 108: Muni android-18-5-2012

Cursor

•zpřístupňuje řádky výsledku db.query()

•metody pro pohyb• moveToFirst(), moveToNext(), getCount()

•metody pro čtení• getColumnIndex(String columnName)

Tuesday, March 19, 13

optimalizovane dotazy do databaze

Page 109: Muni android-18-5-2012

Cursor

•zpřístupňuje řádky výsledku db.query()

•metody pro pohyb• moveToFirst(), moveToNext(), getCount()

•metody pro čtení• getColumnIndex(String columnName)

• getString(int columnIndex), ...

Tuesday, March 19, 13

optimalizovane dotazy do databaze

Page 110: Muni android-18-5-2012

Cursor

•zpřístupňuje řádky výsledku db.query()

•metody pro pohyb• moveToFirst(), moveToNext(), getCount()

•metody pro čtení• getColumnIndex(String columnName)

• getString(int columnIndex), ...

• db.query(table, columns, selection, selectionArgs,........)

Tuesday, March 19, 13

optimalizovane dotazy do databaze

Page 111: Muni android-18-5-2012

Cursor

•zpřístupňuje řádky výsledku db.query()

•metody pro pohyb• moveToFirst(), moveToNext(), getCount()

•metody pro čtení• getColumnIndex(String columnName)

• getString(int columnIndex), ...

• db.query(table, columns, selection, selectionArgs,........)

• SimpleCursorAdapter, CursorAdapter

Tuesday, March 19, 13

optimalizovane dotazy do databaze

Page 112: Muni android-18-5-2012

Příklad

1.prozkoumejte DatabaseHelper2.v MainFragment zobrazte seznam knizek v DB

1.hint: použijte Cursor a SimpleCursorAdapter

•zdrojáky

•muni-android-1

•dokumentace

•http://goo.gl/eme2a

Tuesday, March 19, 13

Page 113: Muni android-18-5-2012

Architektura typické aplikace 2

•Zobraz seznam položek z databáze

Tuesday, March 19, 13

Page 114: Muni android-18-5-2012

Architektura typické aplikace 2

•Zobraz seznam položek z databáze

ListFragment

Tuesday, March 19, 13

Page 115: Muni android-18-5-2012

Architektura typické aplikace 2

•Zobraz seznam položek z databáze

ListFragment

ContentProvider

poskytuje data

Tuesday, March 19, 13

Page 116: Muni android-18-5-2012

Architektura typické aplikace 2

•Zobraz seznam položek z databáze

ListFragment

ContentProvider

poskytuje data uri

Tuesday, March 19, 13

Page 117: Muni android-18-5-2012

Architektura typické aplikace 2

•Zobraz seznam položek z databáze

ListFragment

ContentProvider

poskytuje data

DBčte data

uri

sql

Tuesday, March 19, 13

Page 118: Muni android-18-5-2012

Architektura typické aplikace 2

•Zobraz seznam položek z databáze

ListFragment

ContentProvider

poskytuje data

DBčte data

uri

sql

UI

Tuesday, March 19, 13

Page 119: Muni android-18-5-2012

Architektura typické aplikace 2

•Zobraz seznam položek z databáze

ListFragment

ContentProvider

poskytuje data

DBčte data

uri

sql

UI

Model

Tuesday, March 19, 13

Page 120: Muni android-18-5-2012

Architektura typické aplikace 2

•Zobraz seznam položek z databáze

ListFragment

ContentProvider

poskytuje data

DBčte data

uri

sql

UI

Model

Boilerplate

Tuesday, March 19, 13

Page 121: Muni android-18-5-2012

ContentProvider

Tuesday, March 19, 13

Page 122: Muni android-18-5-2012

ContentProvider

•Jednotné API pro přístup k modelu

Tuesday, March 19, 13

Page 123: Muni android-18-5-2012

ContentProvider

•Jednotné API pro přístup k modelu

•Zapouzdřuje CRUD operace nad databází

Tuesday, March 19, 13

Page 124: Muni android-18-5-2012

ContentProvider

•Jednotné API pro přístup k modelu

•Zapouzdřuje CRUD operace nad databází

•REST-like api a systém URI

Tuesday, March 19, 13

Page 125: Muni android-18-5-2012

ContentProvider

•Jednotné API pro přístup k modelu

•Zapouzdřuje CRUD operace nad databází

•REST-like api a systém URI

•Řeší synchronizaci

Tuesday, March 19, 13

Page 126: Muni android-18-5-2012

ContentProvider

•Jednotné API pro přístup k modelu

•Zapouzdřuje CRUD operace nad databází

•REST-like api a systém URI

•Řeší synchronizaci

•Poskytuje data jiným aplikacím

Tuesday, March 19, 13

Page 127: Muni android-18-5-2012

Příklad

1.prozkoumejte komunikaci provideru a databáze

2.v Provider naimplementujte query operaci3.v MainFragment načtěte data přes provider

•zdrojáky

•muni-android-2

•dokumentace

•http://goo.gl/EFKK7

Tuesday, March 19, 13

Page 128: Muni android-18-5-2012

Architektura typické aplikace 3

•Zobraz seznam položek z databáze

Tuesday, March 19, 13

můžeme vyřešit update modeluaktivita je hloupe ui

Page 129: Muni android-18-5-2012

Architektura typické aplikace 3

•Zobraz seznam položek z databáze

ListFragment

Tuesday, March 19, 13

můžeme vyřešit update modeluaktivita je hloupe ui

Page 130: Muni android-18-5-2012

Architektura typické aplikace 3

•Zobraz seznam položek z databáze

ListFragment

CursorLoader

načítání dat

Tuesday, March 19, 13

můžeme vyřešit update modeluaktivita je hloupe ui

Page 131: Muni android-18-5-2012

Architektura typické aplikace 3

•Zobraz seznam položek z databáze

ListFragment

CursorLoader

načítání dat callbacky

Tuesday, March 19, 13

můžeme vyřešit update modeluaktivita je hloupe ui

Page 132: Muni android-18-5-2012

Architektura typické aplikace 3

•Zobraz seznam položek z databáze

ListFragment

ContentProvider

poskytuje data

CursorLoader

načítání dat callbacky

Tuesday, March 19, 13

můžeme vyřešit update modeluaktivita je hloupe ui

Page 133: Muni android-18-5-2012

Architektura typické aplikace 3

•Zobraz seznam položek z databáze

ListFragment

ContentProvider

poskytuje data

CursorLoader

načítání dat callbacky

uri

Tuesday, March 19, 13

můžeme vyřešit update modeluaktivita je hloupe ui

Page 134: Muni android-18-5-2012

Architektura typické aplikace 3

•Zobraz seznam položek z databáze

ListFragment

ContentProvider

poskytuje data

CursorLoader

načítání dat

DBčte data

callbacky

uri

Tuesday, March 19, 13

můžeme vyřešit update modeluaktivita je hloupe ui

Page 135: Muni android-18-5-2012

Architektura typické aplikace 3

•Zobraz seznam položek z databáze

ListFragment

ContentProvider

poskytuje data

CursorLoader

načítání dat

DBčte data

callbacky

uri

sql

Tuesday, March 19, 13

můžeme vyřešit update modeluaktivita je hloupe ui

Page 136: Muni android-18-5-2012

Architektura typické aplikace 3

•Zobraz seznam položek z databáze

ListFragment

ContentProvider

poskytuje data

CursorLoader

načítání dat

DBčte data

callbacky

uri

sql

UI

Tuesday, March 19, 13

můžeme vyřešit update modeluaktivita je hloupe ui

Page 137: Muni android-18-5-2012

Architektura typické aplikace 3

•Zobraz seznam položek z databáze

ListFragment

ContentProvider

poskytuje data

CursorLoader

načítání dat

DBčte data

callbacky

uri

sql

UI

Model

Tuesday, March 19, 13

můžeme vyřešit update modeluaktivita je hloupe ui

Page 138: Muni android-18-5-2012

Architektura typické aplikace 3

•Zobraz seznam položek z databáze

ListFragment

ContentProvider

poskytuje data

CursorLoader

načítání dat

DBčte data

callbacky

uri

sql

UI

Model

Boilerplate

Tuesday, March 19, 13

můžeme vyřešit update modeluaktivita je hloupe ui

Page 139: Muni android-18-5-2012

Asynchroní operace

Tuesday, March 19, 13

Page 140: Muni android-18-5-2012

Asynchroní operace

•Omezený programovací model

Tuesday, March 19, 13

Page 141: Muni android-18-5-2012

Asynchroní operace

•Omezený programovací model•slabý procesor

Tuesday, March 19, 13

Page 142: Muni android-18-5-2012

Asynchroní operace

•Omezený programovací model•slabý procesor•multi-tasking

Tuesday, March 19, 13

Page 143: Muni android-18-5-2012

Asynchroní operace

•Omezený programovací model•slabý procesor•multi-tasking•aktualizace UI pouze v ui threadu

Tuesday, March 19, 13

Page 144: Muni android-18-5-2012

Asynchroní operace

•Omezený programovací model•slabý procesor•multi-tasking•aktualizace UI pouze v ui threadu•Application not responding aka. ANR

Tuesday, March 19, 13

Page 145: Muni android-18-5-2012

Asynchroní operace

•Omezený programovací model•slabý procesor•multi-tasking•aktualizace UI pouze v ui threadu•Application not responding aka. ANR•UI žije jenom chvíli

Tuesday, March 19, 13

Page 146: Muni android-18-5-2012

Asynchroní operace

•Omezený programovací model•slabý procesor•multi-tasking•aktualizace UI pouze v ui threadu•Application not responding aka. ANR•UI žije jenom chvíli

•Vše, co může dlouho trvat, mimo ui thread

Tuesday, March 19, 13

Page 147: Muni android-18-5-2012

Asynchroní operace

•Omezený programovací model•slabý procesor•multi-tasking•aktualizace UI pouze v ui threadu•Application not responding aka. ANR•UI žije jenom chvíli

•Vše, co může dlouho trvat, mimo ui thread•síťová komunikace

Tuesday, March 19, 13

Page 148: Muni android-18-5-2012

Asynchroní operace

•Omezený programovací model•slabý procesor•multi-tasking•aktualizace UI pouze v ui threadu•Application not responding aka. ANR•UI žije jenom chvíli

•Vše, co může dlouho trvat, mimo ui thread•síťová komunikace•čtení z databáze

Tuesday, March 19, 13

Page 149: Muni android-18-5-2012

Asynchroní operace

•Omezený programovací model•slabý procesor•multi-tasking•aktualizace UI pouze v ui threadu•Application not responding aka. ANR•UI žije jenom chvíli

•Vše, co může dlouho trvat, mimo ui thread•síťová komunikace•čtení z databáze•čtení z filesystému

Tuesday, March 19, 13

Page 150: Muni android-18-5-2012

CursorLoader

Tuesday, March 19, 13

Page 151: Muni android-18-5-2012

CursorLoader

•Čte z ContentProvideru na pozadí

Tuesday, March 19, 13

Page 152: Muni android-18-5-2012

CursorLoader

•Čte z ContentProvideru na pozadí

•Activity/Fragment notifikováno callbackem• onCreateLoader()

• onLoadFinished()

• onLoadReset()

Tuesday, March 19, 13

Page 153: Muni android-18-5-2012

CursorLoader

•Čte z ContentProvideru na pozadí

•Activity/Fragment notifikováno callbackem• onCreateLoader()

• onLoadFinished()

• onLoadReset()

•Umí reusovat jednou nahraný Cursor

Tuesday, March 19, 13

Page 154: Muni android-18-5-2012

CursorLoader

•Čte z ContentProvideru na pozadí

•Activity/Fragment notifikováno callbackem• onCreateLoader()

• onLoadFinished()

• onLoadReset()

•Umí reusovat jednou nahraný Cursor

•Obnoví Cursor při updatu modelu

Tuesday, March 19, 13

Page 155: Muni android-18-5-2012

CursorLoader

•Čte z ContentProvideru na pozadí

•Activity/Fragment notifikováno callbackem• onCreateLoader()

• onLoadFinished()

• onLoadReset()

•Umí reusovat jednou nahraný Cursor

•Obnoví Cursor při updatu modelu

•Je třeba volat v onActivityCreated() jako getActivity().getSupportLoaderManager().initLoader()

Tuesday, March 19, 13

Page 156: Muni android-18-5-2012

Příklad

1.nahraďte volání provideru CursorLoaderem1.hint: fragment nechť implementuje

LoaderManager.LoaderCallbacks

2.hint: použijte getActivity().getContentResolver()

•zdrojáky

•muni-android-3

•dokumentace

•http://goo.gl/BBb2N

Tuesday, March 19, 13

Page 157: Muni android-18-5-2012

Architektura typické aplikace 4

•Aktualizace z internetu

Tuesday, March 19, 13

můžeme vyřešit update modeluaktivita je hloupe ui

Page 158: Muni android-18-5-2012

Architektura typické aplikace 4

•Aktualizace z internetu

ListFragment

ContentProvider

poskytuje data

CursorLoader

načítání dat callbacky

uri

DBčte data

sql

Tuesday, March 19, 13

můžeme vyřešit update modeluaktivita je hloupe ui

Page 159: Muni android-18-5-2012

Architektura typické aplikace 4

•Aktualizace z internetu

ListFragment

ContentProvider

poskytuje data

CursorLoader

načítání dat callbacky

uri

DBčte data

sql

UI

Tuesday, March 19, 13

můžeme vyřešit update modeluaktivita je hloupe ui

Page 160: Muni android-18-5-2012

Architektura typické aplikace 4

•Aktualizace z internetu

ListFragment

ContentProvider

poskytuje data

CursorLoader

načítání dat callbacky

uri

DBčte data

sql

UI

Model

Tuesday, March 19, 13

můžeme vyřešit update modeluaktivita je hloupe ui

Page 161: Muni android-18-5-2012

Architektura typické aplikace 4

•Aktualizace z internetu

ListFragment

ContentProvider

poskytuje data

CursorLoader

načítání dat callbacky

uri

DBčte data

sql

UI

ModelČtení

Tuesday, March 19, 13

můžeme vyřešit update modeluaktivita je hloupe ui

Page 162: Muni android-18-5-2012

Architektura typické aplikace 4

•Aktualizace z internetu

ListFragment

ContentProvider

poskytuje data

CursorLoader

načítání dat callbacky

uri

DBčte data

sql

IntentServiceIntent

Tuesday, March 19, 13

můžeme vyřešit update modeluaktivita je hloupe ui

Page 163: Muni android-18-5-2012

Architektura typické aplikace 4

•Aktualizace z internetu

ListFragment

ContentProvider

poskytuje data

CursorLoader

načítání dat callbacky

uri

DBčte data

sql

provede síťování

sql, CVzapisuje

IntentServiceIntent

Tuesday, March 19, 13

můžeme vyřešit update modeluaktivita je hloupe ui

Page 164: Muni android-18-5-2012

Architektura typické aplikace 4

•Aktualizace z internetu

ListFragment

ContentProvider

poskytuje data

CursorLoader

načítání dat callbacky

uri

DBčte data

sql

provede síťování

sql, CVzapisuje

IntentServiceIntent

Aktualizace

Tuesday, March 19, 13

můžeme vyřešit update modeluaktivita je hloupe ui

Page 165: Muni android-18-5-2012

IntentService

Tuesday, March 19, 13

parametry mozno predat bundlemkonci, pokud neni co zpracovavat,

Page 166: Muni android-18-5-2012

IntentService

•Implementuje frontu tasků za zpracovaní

Tuesday, March 19, 13

parametry mozno predat bundlemkonci, pokud neni co zpracovavat,

Page 167: Muni android-18-5-2012

IntentService

•Implementuje frontu tasků za zpracovaní• onHandleIntent(Intent i)

Tuesday, March 19, 13

parametry mozno predat bundlemkonci, pokud neni co zpracovavat,

Page 168: Muni android-18-5-2012

IntentService

•Implementuje frontu tasků za zpracovaní• onHandleIntent(Intent i)

•Impl. pomocí HandlerThread a Handler

Tuesday, March 19, 13

parametry mozno predat bundlemkonci, pokud neni co zpracovavat,

Page 169: Muni android-18-5-2012

IntentService

•Implementuje frontu tasků za zpracovaní• onHandleIntent(Intent i)

•Impl. pomocí HandlerThread a Handler

•Třeba definovat v manifestu

Tuesday, March 19, 13

parametry mozno predat bundlemkonci, pokud neni co zpracovavat,

Page 170: Muni android-18-5-2012

IntentService

•Implementuje frontu tasků za zpracovaní• onHandleIntent(Intent i)

•Impl. pomocí HandlerThread a Handler

•Třeba definovat v manifestu

•Volání přes Context.startService()

Tuesday, March 19, 13

parametry mozno predat bundlemkonci, pokud neni co zpracovavat,

Page 171: Muni android-18-5-2012

IntentService

•Implementuje frontu tasků za zpracovaní• onHandleIntent(Intent i)

•Impl. pomocí HandlerThread a Handler

•Třeba definovat v manifestu

•Volání přes Context.startService()final Intent i = new Intent(getActivity(), MyService.class);getActivity().startService(i);

Tuesday, March 19, 13

parametry mozno predat bundlemkonci, pokud neni co zpracovavat,

Page 172: Muni android-18-5-2012

Síťování

Tuesday, March 19, 13

Page 173: Muni android-18-5-2012

Síťování

•Http Client, UrlConnection

Tuesday, March 19, 13

Page 174: Muni android-18-5-2012

Síťování

•Http Client, UrlConnection try { final URL url = new URL("http://...."); final HttpURLConnection connection = (HttpURLConnection) url.openConnection(); if (connection.getResponseCode() == 200) { final InputStream is = connection.getInputStream(); try { //TODO networking } finally { is.close(); } } } catch (IOException e) { // TODO: handle exception }

Tuesday, March 19, 13

Page 175: Muni android-18-5-2012

Síťování

•Http Client, UrlConnection try { final URL url = new URL("http://...."); final HttpURLConnection connection = (HttpURLConnection) url.openConnection(); if (connection.getResponseCode() == 200) { final InputStream is = connection.getInputStream(); try { //TODO networking } finally { is.close(); } } } catch (IOException e) { // TODO: handle exception }

Tuesday, March 19, 13

Page 176: Muni android-18-5-2012

Síťování

•Http Client, UrlConnection

•Oprávnění

•android.permission.INTERNET

try { final URL url = new URL("http://...."); final HttpURLConnection connection = (HttpURLConnection) url.openConnection(); if (connection.getResponseCode() == 200) { final InputStream is = connection.getInputStream(); try { //TODO networking } finally { is.close(); } } } catch (IOException e) { // TODO: handle exception }

Tuesday, March 19, 13

Page 177: Muni android-18-5-2012

Parsování a db insert

Tuesday, March 19, 13

Page 178: Muni android-18-5-2012

Parsování a db insert

•JSON - JSONObject, JSONArray

Tuesday, March 19, 13

Page 179: Muni android-18-5-2012

Parsování a db insert

•JSON - JSONObject, JSONArray• getString(), getInt(), getDouble()

Tuesday, March 19, 13

Page 180: Muni android-18-5-2012

Parsování a db insert

•JSON - JSONObject, JSONArray• getString(), getInt(), getDouble()

•XML

Tuesday, March 19, 13

Page 181: Muni android-18-5-2012

Parsování a db insert

•JSON - JSONObject, JSONArray• getString(), getInt(), getDouble()

•XML

•android.util.XML

Tuesday, March 19, 13

Page 182: Muni android-18-5-2012

Parsování a db insert

•JSON - JSONObject, JSONArray• getString(), getInt(), getDouble()

•XML

•android.util.XML•android.sax.RootElement

Tuesday, March 19, 13

Page 183: Muni android-18-5-2012

Parsování a db insert

•JSON - JSONObject, JSONArray• getString(), getInt(), getDouble()

•XML

•android.util.XML•android.sax.RootElement

•ContentValues

Tuesday, March 19, 13

Page 184: Muni android-18-5-2012

Parsování a db insert

•JSON - JSONObject, JSONArray• getString(), getInt(), getDouble()

•XML

•android.util.XML•android.sax.RootElement

•ContentValues• db.insert()

Tuesday, March 19, 13

Page 185: Muni android-18-5-2012

Parsování a db insert

•JSON - JSONObject, JSONArray• getString(), getInt(), getDouble()

•XML

•android.util.XML•android.sax.RootElement

•ContentValues• db.insert()

• getContentResolver.notify(Uri,...)

Tuesday, March 19, 13

Page 186: Muni android-18-5-2012

Příklad

1.Přes RefreshService aktualizujte tabulku Books

2.http://dl.dropbox.com/u/5296640/books.json

•zdrojáky

•muni-android-4

•dokumentace

•http://goo.gl/3EeeTuesday, March 19, 13

Page 187: Muni android-18-5-2012

Architektura typické aplikace 5

•Operace create, update, delete

Tuesday, March 19, 13

můžeme vyřešit update modeluaktivita je hloupe ui

Page 188: Muni android-18-5-2012

Architektura typické aplikace 5

•Operace create, update, delete

ListFragment

ContentProvider

poskytuje data

CursorLoader

načítání dat callbacky

uri

DBčte data

sql

Tuesday, March 19, 13

můžeme vyřešit update modeluaktivita je hloupe ui

Page 189: Muni android-18-5-2012

Architektura typické aplikace 5

•Operace create, update, delete

ListFragment

ContentProvider

poskytuje data

CursorLoader

načítání dat callbacky

uri

DBčte data

sql

UI

Tuesday, March 19, 13

můžeme vyřešit update modeluaktivita je hloupe ui

Page 190: Muni android-18-5-2012

Architektura typické aplikace 5

•Operace create, update, delete

ListFragment

ContentProvider

poskytuje data

CursorLoader

načítání dat callbacky

uri

DBčte data

sql

UI

Model

Tuesday, March 19, 13

můžeme vyřešit update modeluaktivita je hloupe ui

Page 191: Muni android-18-5-2012

Architektura typické aplikace 5

•Operace create, update, delete

ListFragment

ContentProvider

poskytuje data

CursorLoader

načítání dat callbacky

uri

DBčte data

sql

UI

ModelČtení

Tuesday, March 19, 13

můžeme vyřešit update modeluaktivita je hloupe ui

Page 192: Muni android-18-5-2012

Architektura typické aplikace 5

•Operace create, update, delete

ListFragment

ContentProvider

poskytuje data

CursorLoader

načítání dat callbacky

uri

DBčte data

sql

AsyncQueryHandluri,CV

čte data

Tuesday, March 19, 13

můžeme vyřešit update modeluaktivita je hloupe ui

Page 193: Muni android-18-5-2012

Architektura typické aplikace 5

•Operace create, update, delete

ListFragment

ContentProvider

poskytuje data

CursorLoader

načítání dat callbacky

uri

DBčte data

sql

ContentProvider

provede c, u, d uri, CV

AsyncQueryHandluri,CV

čte data

Tuesday, March 19, 13

můžeme vyřešit update modeluaktivita je hloupe ui

Page 194: Muni android-18-5-2012

Architektura typické aplikace 5

•Operace create, update, delete

ListFragment

ContentProvider

poskytuje data

CursorLoader

načítání dat callbacky

uri

DBčte data

sql

ContentProvider

provede c, u, d uri, CV

sql, CVzapisuje

AsyncQueryHandluri,CV

čte data

Tuesday, March 19, 13

můžeme vyřešit update modeluaktivita je hloupe ui

Page 195: Muni android-18-5-2012

Architektura typické aplikace 5

•Operace create, update, delete

ListFragment

ContentProvider

poskytuje data

CursorLoader

načítání dat callbacky

uri

DBčte data

sql

ContentProvider

provede c, u, d uri, CV

sql, CVzapisuje

AsyncQueryHandluri,CV

čte data

Zápis

Tuesday, March 19, 13

můžeme vyřešit update modeluaktivita je hloupe ui

Page 196: Muni android-18-5-2012

AsyncQueryHandler

Tuesday, March 19, 13

Page 197: Muni android-18-5-2012

AsyncQueryHandler

•Volá crud operace v threadu na pozadí

Tuesday, March 19, 13

Page 198: Muni android-18-5-2012

AsyncQueryHandler

•Volá crud operace v threadu na pozadí

•Zpětně notifikuje volajícího

Tuesday, March 19, 13

Page 199: Muni android-18-5-2012

AsyncQueryHandler

•Volá crud operace v threadu na pozadí

•Zpětně notifikuje volajícího

•Problém - volající nemusí již existovat

Tuesday, March 19, 13

Page 200: Muni android-18-5-2012

AsyncQueryHandler

•Volá crud operace v threadu na pozadí

•Zpětně notifikuje volajícího

•Problém - volající nemusí již existovat

•Řešení

Tuesday, March 19, 13

Page 201: Muni android-18-5-2012

AsyncQueryHandler

•Volá crud operace v threadu na pozadí

•Zpětně notifikuje volajícího

•Problém - volající nemusí již existovat

•Řešení•Implementovat jako inner-static nebo top-

level

Tuesday, March 19, 13

Page 202: Muni android-18-5-2012

AsyncQueryHandler

•Volá crud operace v threadu na pozadí

•Zpětně notifikuje volajícího

•Problém - volající nemusí již existovat

•Řešení•Implementovat jako inner-static nebo top-

level•WeakReference pro odkaz na volajícího

Tuesday, March 19, 13

Page 203: Muni android-18-5-2012

AsyncQueryHandler

•Volá crud operace v threadu na pozadí

•Zpětně notifikuje volajícího

•Problém - volající nemusí již existovat

•Řešení•Implementovat jako inner-static nebo top-

level•WeakReference pro odkaz na volajícíhoprivate class MyQueryHandler extends AsyncQueryHandler {

// Use weak reference to avoid memoey leakprivate WeakReference<MyActivity> mMyActivity;public MyQueryHandler(Context context) {

super(context.getContentResolver()); mMyActivity = new WeakReference<MyActivity>((MyActivity) context); }

protected void onQueryComplete(int token, Object cookie, Cursor cursor) { MyActivity activity = mMyActivity.get();

if (activity != null && !activity.isFinishing()) {...

}}

Tuesday, March 19, 13

Page 204: Muni android-18-5-2012

Příklad

1.Doplňte c, u, d operace do provideru a fragmentu

•zdrojáky

•muni-android-5

•dokumentace

•http://goo.gl/BS1hr

Tuesday, March 19, 13

Page 205: Muni android-18-5-2012

Děkuji@ondraz

ukázky kódu a obrázky pocházejí z http://developer.android.com pod licencemi Apache v2.0 a Creative Commons Attribution v2.5

Tuesday, March 19, 13


Recommended