Debug & Log

In: компјутери

3 окт 2011

Значи прво вака – ко ке download-ирам апликација од маркет НЕКАМ да гледам лог на сите страни. И како девелопери мора да внимаваме сите на ова.

Значи кога аппликација оди јавно , продукциска верзија несмеј да има уклучено логирање.

КРАТКО РЕШЕНИЕ :

private boolean isDebugMode() {

return (getApplicationInfo().flags & ApplicationInfo.FLAG_DEBUGGABLE) != 0;

}

ова го чита флагот <application… android:debuggable=”true” … > од AndroidManifest.xml. Овај параметар ке одлучи дали да се логира или не. Значи во иднина се шо треба е во AndroidManifest.xml фајлот да го сеттирате флагот android:debuggable на false.

Во следниот пост ке пишам за Application класа , како ентри-поинт на секоја апликација и шо би требало внатре да се инициализира.

Збогум сега за сега …

Ме запрепасти фактот колку уреди беа активирани кога излезе Motorola Droid и Samsung Galaxy S :)

YouTube Preview Image

После долго време куцање кодови за андроид апликации, бази мази и 300 други чуда , приметив огромно повторување на код – посебно во делот кога се работи со курсори. Во консултација со мојот драг тутор Никола Живков стигнавме до решение кое не е баш нешто ново и невидено во Јава светот – ама во Android код никогаш го немав сретнато.

Се работи за Template method pattern - генерични методи и класи кои го кријат целиот повторувачки код , како и сите проверки и прилагодвања на еден курсор. Кодот е краток и сосем јасен – за тие што не се запознаени детално со Java generics – повелете краток туториал

Source Code – CursorHelper.java

Пример 1 :

CursorHelper cursorHelper = CursorHelper.getInstance(context);

someObject = cursorHelper.processWithCursor(

new CursorQuery<SomeObject>(SOME_CONTENT_URI, null,WHERE_CLAUSE, null, null){

@Override

public SomeObject doWithCursor(Cursor c) {

//some work with c

SomeObject obj = new  SomeObject();

return obj;

}

});

овај пример работи со методата processWithCursor која врака резултат/објект

мислам дека кодот е доволно јасен , за подетални прашања пишете коментар

Пример 2 :

cursorHelper.processWithCursorWithoutResult(new CursorQueryWithoutResult(CONTENT_URI, null, null, null, null) {

@Override

public void doWithCursorWithoutResult(Cursor c) {

// some work with c

}

});

во овај пример се користи методата doWithCursorWithoutResult која не врака ништо – можи да се користи и имплементацијата како во првиот пример со промена – методот ке врака null.

Кодот не е перфектен :) треба да се досреди за да биди уште поелегантен – ама во главно тоа е функционалноста која сакавме уште од почтокот да ја добиеме.

п.с. blog.mk SUCKS !!!!!!!!!

AsyncTask II

In: компјутери

23 сеп 2010

како шо ветив – време е за некој подобар пример со asynctask

нема многу да ги објаснувам работите – ке видите во кодот шо има.

двата примери се за download на content од нет, поточно слики. Првиот пример лоадира слики во позадина и прикажва диалог. Втората функционалност во истата апликација лоадирање на истите слики но со прогрес диалог

Втората апликација е асинхроно download-ирање на аликите – поточно има листа од слики која ги download-ира ресурсите кога ке бидат потребно. Листата не работи како шо треба – ама главната поента ја има (немма време ич да ја средвам)

Се надевам декак како освновни примери ке ви се најдат во иднина.

Source Code :

AsyncTask background loader

AsyncTask with Progress and Loader dialog

p.s. Следниот пост ке биди за CursorHelper – мала магија :)

AsyncTask

In: компјутери

7 сеп 2010

Кој шо работел со Android сигурно мн се има замарано со threads/multithreading посбено несто ко ке треба да биди врзано со главниот/UI thread. Епа мило ми е шо во Google мислат на се :) . Има апстракна калса AsyncTask која ке ви ја збрка целата работа во посебен thread и то на перфектен и преелегантен начин. Јас веке заборајв на handlers messaging runnable и уште еден тон компликации.

Во позадина работи како нормален thread (нормално во истиот процес како и апликацијата). Посебно добро за пргорес деалози, процес диалози ако и за сите останати захтевни процесиранја/генериранја во позадина.

Има неколку методи кој можите да ги override-увате за ваши потреби

пр :
private class TestTask extends AsyncTask<String, Void, Void>  {
protected void onPreExecute() {
doSomeWork ...
}

protected Void doInBackground(String... urls) {
doSomeWork ...
}

protected void onPostExecute(Void unused) {
doSomeWork ...
}

}

методите само си кажват за со се :)

За да го извршиме таскот треб да се напрај објект ..бла бла .. и да се повица execute(…); во нашиот пример влезен параметар е String – execute(”so sakas”);

Следниот пост ке биди за АsyncTask класа која ке има прогрес/процес диалог

Збогум :)