Pokazywanie postów oznaczonych etykietą android. Pokaż wszystkie posty
Pokazywanie postów oznaczonych etykietą android. Pokaż wszystkie posty

niedziela, 18 lipca 2010

Coś dla początkujących - NotePad tutorial

Wstęp
Wszystkim, którzy dopiero rozpoczynają przygodę z Androidem szczególnie polecam Notepad tutorial. Znajdują się tam trzy proste ćwiczenia, dzięki którym w łatwy i szybki sposób można poznać podstawy programowania na platformę Android.

Ponieważ potrzebowałem jakiegoś prostego przykładu aby opisywać bardziej zaawansowane rzeczy stwierdziłem, że nie będę pisał od podstaw nowego szkieletu tylko wykorzystam Notepad tutorial. Po pierwsze dlatego, że jest dobrze napisany, po drugie - dobrze objaśniony, a po trzecie - zawiera właśnie to czego potrzebowałem. Źródła ćwiczeń z rozwiązaniami można ściągnąć stąd.

Drobne zmiany
Jednak nie mogę się powstrzymać przed pewnymi modyfikacjami. Obecnie to wygląda tak:



Po pierwsze, chciałbym aby były wyświetlane na liście takie wartości jak tytuł i treść, teraz jest tylko tytuł notatki. W tym celu należy dodać nowe pole w wierszach listy, w którym będzie się znajdowała treść notatki. Plik notes_row.xml wygląda teraz tak:



Dodany jest nowy TextView z id text2, a pole tytułu będzie wyświetlane większymi literami.

Teraz trzeba poprawić metodę fillData() w klasie Notepadv3 aby wypełniała text2 treścią.

private void fillData() {
        // Get all of the rows from the database and create the item list
        Cursor mNotesCursor = mDbHelper.fetchAllNotes();
        startManagingCursor(mNotesCursor);
        
        // Create an array to specify the fields we want to display in the list (only TITLE)
        String[] from = new String[]{NotesDbAdapter.KEY_TITLE, NotesDbAdapter.KEY_BODY};
        
        // and an array of the fields we want to bind those fields to (in this case just text1)
        int[] to = new int[]{R.id.text1, R.id.text2};
        
        // Now create a simple cursor adapter and set it to display
        SimpleCursorAdapter notes = 
             new SimpleCursorAdapter(this, R.layout.notes_row, mNotesCursor, from, to);
        setListAdapter(notes);
    }


Teraz prezentuje się to tak:


Jeszcze tylko zmienić szerokości layoutów, aby cała szerokość wiersza mogła być zaznaczana i klikana. Plik notes_list.xml wygląda teraz tak:




To by było na tyle. Następnym razem opisze filtrowanie list.

niedziela, 25 kwietnia 2010

Android a baza danych cz. 1

Wypełanie bazy danych za pomocą SQL
Bardzo przydatną klasą do obsługi bazy danych w Androidzie jest SQLiteOpenHelper, szczególnie przy jej tworzeniu oraz uaktualnianiu. Przy każdym otwarciu jest sprawdzana wersja bazy danych, a jeżeli nie jest utworzona to wywoływana jest metoda onCreate(SQLiteDatabase db), w tym miejscu należy zaimplementować sposób tworzenia bazy.
Na przykład można wykonać SQL tworzący tabele oraz wczytać dane do wypełnienia bazy z pliku data.sql wrzuconego do raw w postaci wielu insertów. Czyli coś w ten deseń:

@Override
public void onCreate(SQLiteDatabase db) {
    Log.d(TAG, "Tworzenie bazy danych");

    db.execSQL(DATABASE_CREATE);
    InputStream in = null;
    try {
        in = mCtx.getResources().openRawResource(R.raw.data);
        if (in != null) {
            InputStreamReader tmp = new InputStreamReader(in);
            BufferedReader reader = new BufferedReader(tmp);
            String str;
            while ((str = reader.readLine()) != null) {
                 db.execSQL(str);
             }
         }
    } catch (java.io.FileNotFoundException e) {
         Log.d(TAG, "FileNotFoundException ",e);
    } catch (IOException e) {
         Log.d(TAG, "IOException ",e);
    } finally {
         try {
             if (in != null){
                 in.close();
             }
         } catch (IOException e) {
             e.printStackTrace();
             Log.d(TAG, "Closing",e);
         }
    }
    Log.d(TAG, "Utworzono baze danych");
}


Należy pamiętać o dodaniu tabeli android_metadata.


CREATE TABLE "android_metadata" ("locale" TEXT DEFAULT 'en_US');


i wstawienie wartości


INSERT INTO "android_metadata" VALUES ('en_US');


Jeśli chodzi o niewielkie bazy danych to ok, ale co gdy mamy do czynienia z większą ilością danych, gdy plik data.sql ma około kilka MB. Wtedy po pierwsze android nie otworzy pliku większego niż 1MB (takie systemowe ograniczenie), po drugie wykonywanie tych wszystkich insertów będzie trochę trwało, a po trzecie aplikacja będzie zajmowała więcej miejsca na telefonie niż naprawdę potrzebuje ponieważ dane się duplikują w pliku data.sql oraz w bazie danych. Niestety nie da się skasować pliku dodanego do aplikacji ponieważ plik apk jest podpisany cyfrowo.
Jeśli chodzi o pierwszy problem to plik można zawsze podzielić na kilka mniejszych tak aby nie przekraczały 1MB. W drugim przypadku możemy się pocieszyć, że wrzucanie danych następuje tylko przy pierwszym uruchomieniu, potem aplikacja startuje normalnie. Natomiast użytkownik mając niewiele miejsca na telefonie na początku wykasuje aplikacje zajmujące najwięcej miejsca, dlatego lepiej unikać duplikacji niepotrzebnych rzeczy.
Warto więc zastanowić się nad innym rozwiązaniem. W następnej części przedstawię jak można dodać do aplikacji już gotową bazę danych.


piątek, 23 kwietnia 2010

Android na iPhonie

Ta wiadomość:
http://linuxoniphone.blogspot.com/2010/04/ive-been-working-on-this-quietly-in.html
sprawiła, że cały dzień chce mi się śmiać.

Koniec świata. Android na iPhonie!
Wreszcie pojawiła się wspólna platforma na której można porównać oba systemy, hehe.
Są jeszcze pewne problemy, ale jak zostaną rozwiązane to myślę, że takie porównanie wyjdzie na dobre obu systemom. Mam nadzieję, że wytworzy się atmosfera sprzyjająca merytorycznej dyskusji bez możliwości zrzucania winy na hardware itp.