آموزش جاوا و اندروید



توی اندروید دو تا روش برای ذخیره سازی وجود داره: 

1. Shared Preferences

2. Database

 

اول دومی رو میگم!

فریم ورک اندروید از دیتابیس SQLite که یه نسخه سبک دیتابیس هست و تقریبا ویژگی های لازم برای یه دیتابیس خوب رو داره، استفاده میکنه. این دیتابیس به صورت embeded توی اندروید پیاده سازی شده و فقط کافیه ما کلاسش رو صدا بزنیم و از متدهاش استفاده کنیم.

به جز یکی دو مورد خاص، لازم نیست درگیر دستورات SQL ای بشیم ولی میتونیم از این دستورات هم استفاده کنیم.

 

اولین قدم برای پیاده سازی دیتابیس ساخت یک کلاس helper از SQLiteOpenHelper هست که یه کلاس abstract بوده و باید دو تا متد و سازندش رو پیاده سازی کنیم.

این کلاس شامل متد onCreate هست که فقط یک بار (اولین بار) اجرا میشه و جدول دیتابیس رو با توجه به مشخصاتی که براش تعریف شده میسازه.

متد دیگه onUpgrade هست که اگر ورژن دیتابیس تغییر کنه، دستورات این متد ایجاد میشه.

 

 

 


متد Select

 

این متد خیلی مهمه. کلا برای خوندن از دیتابیس از این متد استفاده میشه. یعنی هر کاری از قبیل سرچ و نمایش و اینا وظیفه این متد هست. مثل قبل، برای استفاده از این متد دو روش وجود داره:

 1. استفاده از متد "rawQuery"

 2. استفاده از متد "query"

 

ادامه مطلب


متد insert در دیتابیس

 

این متد برای اینه که یک سطر به دیتابیس اضافه بشه. به صورت کلی دو روش برای این کار وجود داره:

1. استفاده از دستورات SQL و متد execSQL

متد "execSQL" خروجی نداره و فقط یه دستور SQL رو اجرا میکنه. مشکلش اینه که ممکنه ارور داشته باشه و برنامه کرش کنه. بخاطر همین حتما باید توی try-catch باشه. مضاف بر اینکه، اندروید توصیه میکنه از این استفاده نکنیم چون خروجی نداره. ولی خب در هر صورت هر چی عشقتون میکشه :))

 

ادامه مطلب


در واقع اندروید اینجوریه که توی کلاس SQliteOpenHelper عملیات ساخت و کانفیگ دیتابیس انجام میشه و توی کلاس SqLiteDatabse متدهای CRUD فراخونی میشه (یعنی متدهای عملیات روی دیتابیس)

توی پست قبل ما فقط دیتابیس رو ساختیم. حالا باید دیتابیس رو باز کنیم. از کلاسی که ساختیم (DatabaseHelper) یک نمونه میسازیم و متد getWritable رو از این شی فراخونی میکنیم. 

 

شی DatabaseHelper دو نوع دیتابیس خوندنی (getReadable) و نوشتنی (getWritable) رو میده. دیتابیس خوندنی فقط امکان select رو به ما میده ولی برای نوشتن و آپدیت و اینا باید از دیتابیس نوشتنی استفاده کنیم.

 

ادامه مطلب


توی اندروید دو تا روش برای ذخیره سازی وجود داره: 

1. Shared Preferences

2. Database

 

اول دومی رو میگم!

فریم ورک اندروید از دیتابیس SQLite که یه نسخه سبک دیتابیس هست و تقریبا ویژگی های لازم برای یه دیتابیس خوب رو داره، استفاده میکنه. این دیتابیس به صورت embeded توی اندروید پیاده سازی شده و فقط کافیه ما کلاسش رو صدا بزنیم و از متدهاش استفاده کنیم.

به جز یکی دو مورد خاص، لازم نیست درگیر دستورات SQL ای بشیم ولی میتونیم از این دستورات هم استفاده کنیم.

 

ادامه مطلب


برای داشتن صفحه تنظیمات نیز از Preference استفاده میشه.

برای ساخت صفحه تنظیمات روی res کلیک راست کرده و new android resource file رو میزنیم. ریسورس تایپ رو XML میذاریم و به طور پیش فرض روت المنت PreferenceScreen میشه. بنابراین یک فولدر XML در res ساخته میشه که شامل فایل تنظیمات ما هست.

 

ادامه مطلب


یکی دیگه از روش های ذخیره سازی اطلاعات در اندروید استفاده از Preference ها هست. توی این روش اطلاعات در یک فایل XML ذخیره میشه. معمولا اطلاعاتی مثل تنظیمات برنامه (اسم کاربر، اندازه فونت، رنگ بک گراند و .) رو توی Preferenceها ذخیره میکنن.

 

اگر گوشی روت شده باشه (دسترسی به روت داشته باشه) میشه فایل این XML رو دید. (توی امولیتور از طریق مسیر

اسم پکیج برنامه < data > data قابل نمایشه)

 

ادامه مطلب


1. حتما از کلاس Labels استفاده بشه (برای اسامی دیتابیس، جدول و ستون ها و .)

 

2. اگر بخواهیم سرچ کنیم مثلا کدوم کاربر اسم یا فامیلیش یه چیز خاصی هست میشه از Where توی دستور query استفاده کرد. (برای اطلاعات بیشتر به سایت اندروید مراجعه شود)

 

3. حتما حتما حتما برای دسترسی به دیتابیس توی هر اکتیویتی دیتابیس باید باز بشه. (چند ساعت سر همین رفتم سر کار!)

 

4. هر جا کارمون با Cursor تموم شد باید اونو close کنیم.

 

5. استفاده از سینگل تون هم روش خوبیه برای اینکه توی هر اکتیویتی از دیتابیس شی نسازیم. (اینو تست نکردم هنوز)

 

6. لینک های مفید دیتابیس:

 

لینک 1

 

لینک 2

 

لینک 3 (استفاده از شی سینگل تون)

 

 


متد  delete

 

این متد مثل متد آپدیت هست ولی contentValues نداره. خروجی int هم داره. این int شماره اون سطری که تحت تاثیر قرار گرفته (یعنی حذف شده) رو نشون میده در غیر این صورت "صفر" برمیگردونه. 

برای اینکه کل سطرها حذف شه باید بجای whereClause "یک" بذاریم. (اینو تست نکردم توی سایت اندروید نوشته)

 

ادامه مطلب


نوشتن Listener برای Preference

 نکته اول: اگر بخواهیم با کلیک روی preference و تغییر مقدار آن یه اتفاقی بیفته از این روش استفاده میکنیم. برای این کار از متد 

setOnPreferenceChangeListener

استفاده میکنیم. در واقع این متد اینترفیس Preference.OnPreferenceChangeListener رو فراخونی میکنه که داخل این اینترفیس متد onPreferenceChange هست. این متد پس از تغییر مقدار Preference مورد نظر فراخونی میشه.

ادامه مطلب


اول در مورد پروتکل HTTP توضیح میدم.

 

ما اگر درخواستی برای سرور داریم باید اونو در قالب Http به سمت سرور بفرستیم. یعنی Http پروتکلی هست که میشه توسط اون در بستر وب به نقل و انتقال دیتا پرداخت. برای اجرا شدن این پروتکل نیاز به کلاینت (مرورگر) و سرور داریم.

پیام هایی از جنس Http حاوی دو بخش هستند. Body و Header. دیتای اصلی که قراره ارسال شه در قسمت Body قرار میگیره و در قسمت هدر یک سری متادیتا (مثلا انکدینگ) قرار میگیره که تعیین میکنه دیتای اصلی چجوری باید هندل شه.

 

ادامه مطلب


وب سرویس:

 

وب سرویس روشی برای ایجاد ارتباط بین دو ماشین بر بستر وب (شبکه) است.

یک وب سرور منتظر درخواست از سمت کلاینت است. وقتی این درخواست میاد، وب سرویس ریسورس مورد نظر رو در جواب میفرسته. این ریسورس میتونه JSON، XML، HTML یا فایل های صدا و تصویر و . باشه. 

در وب سرویس درخواست ها باید بر بستر اینترنت (شبکه) باشه.

 

ادامه مطلب


وب سرویس:

 

به شکل ساده یک وب سرویس از طریق وب اعمالی را انجام می دهد (توابع یا سابروتین ها ) و نتایج را به برنامه دیگری می فرستد. 

 

این یعنی برنامه ای در یک کامپیوتر در حال اجراست ، اطلاعاتی را به کامپیوتری می فرستد و از آن درخواست جواب می کند ، برنامه ای که در آن کامپیوتر دوم است کارهای خواسته شده را انجام می دهد و نتیجه را بر روی ساختارهای اینترنتی به برنامه اول بر می گرداند.

 

وب سرویس ها می توانند از پروتکول های زیادی در اینترنت استفاده کنند اما بیشتر از HTTP که مهم ترین آنهاست استفاده می شود.

 

وب سرویس Rest

 

در سیستمهایی که بر اساس مفهوم REST طراحی شده اند,همه چیز به صورت منابع در نظر گرفته می شوند که این منابع با URIها مشخص میشوند.البته این URIها وما ثابت نیستند و به آدرس فیزیکی یک منبع واقعی اشاره نمیکنند، بلکه انتزاعی هستند کهREST استفاده میکند.

 

Rest یک نوع API است اما همه APIها از نوع Rest نیستند. 

API یک واژه عام هست و در حالت کلی به نحوه ارتباط یک قسمت از کد با قسمت دیگر گفته میشود. 

REST یک معماری نرم افزار است و وب سرویس هایی که از تمامی قوانین این معماری استفاده میکنند RESTful نامیده میشوند.

 

REST یک سری قوانین هست که میگه چجوری از urlها و پروتکل های http استفاده کنیم تا یک API بسازیم. REST در مورد فرمت خروجی فورسی نداره ولی معمولا خروجی JSON هست.

 

در حقیقت API به اپلیکیشن ها اجازه می‌دهد با یکدیگر گفت‌وگو کنند.

 

API های دیگه هم هستن که توی خروجی مثلا XML یا باینری میفرستن.

 

وب سرویس یک نوع API است. 

وب سرویس یک API بر بستر وب است.

 


تفاوت هاست و سرور 1

 

تفاوت هاست و سروی 2

 

تفاوت هاست ویندوز و لینوکس

 

وب سرور نرم افزاری است که روی کامپیوتر سرور نصب شده و به درخواست های کاربران پاسخ میدهد. این درخواست ها میتوانند با پروتکل htpp یا چند پروتکل دیگر باشند. مثلا وب سرور آپاچی (که بهش Appache HTTP server هم میگن) یا LiteSpeed یا . . تامکت وب سرور جاوا هست.

ادامه مطلب


فرض میکنیم یک فایل XML شامل مشخصات چندین گل داریم که میخواهیم با استفاده از XMLPullParser آن را پارس کنیم.

 

قدم اول: ساخت کلاس FLower و ایجاد ستر و گتر برای پراپرتی های آن. متد toString را اوور راید میکنیم تا هنگام چاپ شی فلاور در لیست اسم آن را نمایش دهد. (هر پراپرتی دیگه ای جز name هم میتوان نوشت)

 

 

ادامه مطلب


این خیلی مطلب خوبیه. توی ویرگول نوشته بود

آموزش RESTful API با مثال کاربردی


تا حالا از خودتون پرسیدید که:
چگونه می توانیم یک سایت با Performance بالا بسازیم؟
چگونه یه سایت را میتوان برای پلتفرم های مختلف گسترش داد؟
یا اینکه یک وبسایت چگونه میتواند با زبان های برنامه نویسی مختلف تعامل داشته باشد؟

پاسخ این است که شما باید یک API ایجاد کنید.

 

ادامه مطلب


گفتیم convertView ویویی هست که هر سطر نشون میده. توی روش قبل، هر بار ویجت های هر سطر (یعنی همین convertView) رو بیرون میکشیدیم و مقادیرشون رو با شی فعلی ست میکردیم.

توی روش بهبود یافته باید کلاس ViewHolder رو به صورت زیر بسازیم: 

 

پراپرتی های کلاس ViewHolder معادل جاوایی ویجت های موجود در هر سطر لیست هست.

ادامه مطلب


برای نمایش لیستی از اطلاعات از ListView استفاده میشه که خیلی پرکاربرده.

اول باید کلاس Model رو بسازیم. کلاس مدل همون چیزیه که قراره توی هر سطر از لیست نمایش داده بشه. اینجا من کلاس Flower رو برای مدل در نظر گرفتم. در ادامه لیست رو ایجاد میکنیم.

ادامه مطلب


فرض میکنیم یک فایل XML شامل مشخصات چندین گل داریم که میخواهیم با استفاده از XMLPullParser آن را پارس کنیم.

ایده این روش اینجوریه که به محض رسیدن به هر تگ بهمون یک Event میده. کلا پنج نوع Event داریم:

Start_DOCUMENT

شروع تگ روت (تگ اصلی)

START_TAG

شروع تگ

TEXT

متن تگ

END_TAG

پایان تگ

END_DOCUMENT

پایان تگ روت (تگ اصلی)

 

تا قبل از اینکه به تگ END_DOCUMENT برسیم باید عملیات پارس رو انجام بدیم. در نتیجه این شرط توی وایل نوشته میشه. 

 

ادامه مطلب


JSON اطلاعات رو به صورت key-value ذخیره میکنه.

- ایجاد یک کلاس جدید

- ایجاد یک متد - خروجی این متد لیستی از جنس اشیای مورد نظر است. (ایجاد مثلا Flower)

- ورودی این متد یک رشته از JSON است. 

پکیج JSON.org در جاوا برای اعمال روی JSON می باشد.

ادامه مطلب


آقا این جنریک سخته! از صبح دارم فکر میکنم چجوری شد ولی بالاخره فهمیدم!

موقع تعریف کلاس جنریک <T> مینویسیم که همون ورودی هست. یعنی ورودی هر چی میخواد باشه این کارا روش انجام بشه.

فقط عکس کدشو میذارم.

 

نحوه پیاده سازی این کلاس: (کلاس ورودی کلاس Flower هست)

 


تعریف آرایه ها در PHP

برای تعریف یک آرایه در PHP ، می توانید از دو شکل مختلف استفاده کنید. در روش اول برای تعریف یک آرایه می باید از کلمه کلیدی array به همراه پرانتز های باز و بسته استفاده کنید.

در این روش در داخل پرانتز های باز و بسته، عناصر آرایه قرار داده می شوند. در نظر داشته باشید که عناصر آرایه توسط کاما یا ” ,  ” از همدیگر جدا می شوند.

ادامه مطلب


فرگمنت یک ویو هست که روی اکتیویتی اتچ میشه. توی این پست ساده ترین روش پیاده سازی اون رو میگم.

1. ایجاد یک کلاس و اکستند کردن آن از Fragment

2. ایجاد یک ریسورس از جنس لی اوت برای فرگمنت

توی شکل زیر من فقط یک تکست ویو توی فرگمنت گذاشتم.

 

ادامه مطلب


فرگمنت یک ویو هست که روی اکتیویتی اتچ میشه. توی این پست ساده ترین روش پیاده سازی اون رو میگم.

1. ایجاد یک کلاس و اکستند کردن آن از Fragment

2. ایجاد یک ریسورس از جنس لی اوت برای فرگمنت

توی شکل زیر من فقط یک تکست ویو توی فرگمنت گذاشتم.

 

ادامه مطلب


اصلی ترین کاربرد فرگمنت اینه که به ما ویوی داینامیک بده.

 

FragmentManager

این کلاس فرگمنت ها را مدیریت میکنه. از طریق این کلاس میشه به FragmentTransaction دسترسی پیدا کرد.

 

FragmentTransaction

 

این کلاس ها متدهایی برای add، replace یا remove فرگمنت ها داره.

 

از این دو کلاس به صورت زیر استفاده میشه:

FragmentManager fragmentManager = getFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();

در این حالت باید یک placeholder به اکتیویتی اضافه کنیم تا فرگمنت داخل آن قرار بگیره. معمولا این placeholder فریم لی اوت هست.

ادامه مطلب


برای اینکه توی کد متوجه بشیم گوشی rotate شده یا نه از کد زیر استفاده میکنیم:

 

 

توی این کد با چرخش گوشی نوع فرگمنت تغییر میکنه.

 

نکته مهم اینه که نمونه سازی از کلاس Configuration حتما باید توی متد OnCreate باشه. (چون اول توی فیلدا نوشتم و ارور داد)


توی این روش میشه از یک فریم لی اوت استفاده کرد و از ویوی فرگمنت به صورت ثابت استفاده نکرد.

اینجا مثل روش قبل، توی فرگمنت اول یک لیسنر هست که توسط اکتیویتی پیاده سازی شده. در فرگمنت دوم از متد استاتیک getInstance استفاده شده، بدین معنا که دیتای گرفته شده از فرگمنت اول به آرگومان این متد داده میشه.

ادامه مطلب


NaN = Not a Number

 

مثلا اگر رادیکال -2 رو چاپ کنیم Nan میده. چرا؟ چون وما اشتباه نیس و این عدد در حوزه اعداد مختلط تعریف شدس

همین طور 0.0/0.0 هم مقدارش Nan هست. چون 0.0 صفر مطلق نیست و صفر حدودیه.

 

ولی 1/0 میشه بی نهایت(Infinity چاپ میکنه). چون اینجا منظورمون صفر مطلقه.

 

توضیح بیشتر


سایز دیوایس همون رزولوشن نیست. ممکنه یه گوشی کوچیک باشه ولی رزولوشن اون از یه تبلت بیشتر باشه. برای ما اندازه طول و عرض دیوایس مهمه. کلا ما با رزولوشن کاری نداریم.

توی کد اول رزولوشن طول و عرض رو میگیریم و با تقسیم اون بر density (یعنی همون تعداد پیکسل در هر اینچ) سایز دیوایس بدست میاد.

ادامه مطلب


انیمیشن رو توی اندروید میشه برای هر ویویی به کار برد. روش های زیادی برای پیاده سازی انیمیشن وجود داره.

هم میشه با کد جاوا نوشت، هم میشه با ترکیبی از کد جاوا و XML نوشت و هم میتوان از کتابخانه های third party (مثل یویو) استفاده کرد.

در روش ترکیبی کد جاوا و XML، باید فولدر anim در دایرکتوری res تعریف شه و توی این فولدر یک فایل XML شامل انیمیشن مورد نظر نوشته بشه. این روش بهتریه، چون هم کد خواناتره هم میشه برای ویوهای دیگه از این انیمیشن استفاده کرد.

در ادامه هر یک انیمیشن ها رو توضیح میدم

 


چاهار تا انیمیشنی که معرفی شد حتما باید ویژگی duration رو داشته باشن.

 

اتریبیوت های :

- fillBefore

- fillAfter

- interpolator

- repeatMode

- repeatCount

- startOffset

بین همه ویوها مشترک هستن. فکر کنم بشه اینا رو هم برای set بکار برد هم برای خود انیمیشن. مطمئن نیستم.


وقتی برای اولین بار روی آی برنامه کلیک میشه، متدهای زیر فراخونی میشن:

 

onCreate()
onStart()
onResume()

وقتی دکمه home زده میشه، متدهای زیر فراخونی میشن:

 

onPause()
onStop()

 

وقتی دوباره اپ باز میشه (روش کلیک میشه یا از طریق ریسنت ها)، متدهای زیر فراخونی میشن:

 

 

onRestart()
onStart()
onResume()

 

 

وقتی روی دکمه بک کلیک میشه، متدهای زیر فراخونی میشن:

 

onPause()
onStop()
onDestroy()

 

 

هر وقت یک اکتیویتی استارت میشه میره توی استک (push میشه) و وقتی دکمه بک زده میشه از استک pop off میشه (یعنی حذف میشه).

 

stack

 

منبع


توضیحات اینا رو توی کاغذ نوشتم. بنابراین دیگه توضیح نمیدم.

در کل توسط ContentResolver به دیتابیس اپ های دیگه دسترسی پیدا میکنیم. مثل خوندن کانتکت ها.

 

"به زبان ساده content provider امکان به اشتراک گذاری داده ها را بین برنامه ها ممکن می سازد."

 

آموزش انجام عملیات CRUD برای دیتابیس فچ شده - کد رو نوشته و خیلی کامل و خوبه

 

اینم مثل بالاییه ولی بالایی بهتره

 

-------

لیست URIها در اندروید

 

------

چون عملیات دیتابیسی زمان بر هست، بهتره کوئری ها توی یک ترد دیگه باشن. بنابراین از cursoeLoader استفاده میکنن.

 

کد خواندن کانتکت ها با استفاده از cursorLoader

 

آموزش در یوتیوب


زمانی که میخواهیم اکتیویتی مقصد یه کاری انجام بده و نتیجه آن به ما برگرده. 

در چنین شرایطی به جای startActivity از startActivityForResult استفاده می کنیم. برای مثال کاربر را به گالری هدایت میکنیم تا عکسی را انتخاب کند و پس از انتخاب عکس به برنامه ما برگرد. نتیجه بازگردانده شده شامل uri مربوط به عکس می باشد. در چنین حالاتی از startActivityForResult استفاده کرده و یک requestCode به آن اختصاص می دهیم.


دو نوع پراگرس بار داریم:

determinate و Indeterminate

 

 

 

determinate: درصد انجام فرآیند رو به صورت تیکه تیکه نشون میده.

 

Indeterminate: فقط مثل یه دایره میچرخه - شکل اول

 

با اتریبیوت android:indeterminate="true" میشه این ویژگی رو اضافه کرد.

 

اگر به پراگرس بار استایل ندیم، مثل شکل اول میشه.

 

اگر به پراگرس بار به صورت زیر استایل بدیم، میتونیم توی فایل style.xml رنگش رو عوض کنیم.

 

 

 

برای اینکه تیکه تیکه بره جلو، باید یک shape از نوع ring تعریف کنیم به صورت زیر:

 

از طریق اتریبیوت drawable این ویژگی رو ست میکنیم. نکته مهم اینه که برای این حالت حتما باید از همین استایل استفاده بشه تا جواب بده.

 

 

 

لینک آموزشی خوب

 


مثال خوب از فریم لی اوت لینک زیر هست:

 

لینک

 

کلا فریم لی اوت چیزی نداره، جای المان ها رو با اتریبیوت 

android:layout_gravity

مشخص میکنیم.

 

احتمالا toolbar از فریم لی اوت استفاده میکنه. چون میشه ویوهایی که میخوایم توی تولبار قرار بگیره جاشون رو با اتریبیوت بالا مشخص کنیم.


آموزش های خوب برای کانسترینت لیوت:

 

همون خانمه که فیلمش یک ساعت بود توی یوتیوب

 

همون دختره متولد 1990

 

آموزش width و height به صورت درصدی

 

آموزش کلی خوب 1 - حتما ببین

 

آموزش کلی خوب 2 - حتما ببین

 

آموزش های موضوعی:

 

آموزش aspect ration

 

آموزش گرد کردن تصویر

 

آموزش chain - سایت خود اندورید


تولبار یک ویو گروپ هست. یعنی میتونه واسه خودش یه لیوت داشته باشه و توی اون ویجت قرار بگیره.

 

میشه برای تولبار title  و subTitle و  آی برای نویگیشن و elevation قرار داد. 

()toolbar.setTitle

()toolbar.setSubTitle

()toolbar.setNavigationIcon

()toolbar.setElevation

بهتره تولبار رو توی یک لیوت جداگونه نوشت و از تگ include استفاده کرد.

 

اگر توی یک style جدید اتریبیوت های زیر رو بنویسیم:

textPrimaryColor و textSecondaryColor به ترتیب رنگ های فونت تولبار و پاپ آپ تعیین میشه.

استایل رو توی xml با اتریبیوت theme اعمال میکنیم.

میشه اتریبیوت themePopUp برای تم منو نیز تعیین کرد.


برای انتخاب رنگ تم اپلیکیشن باید ابتدا یک رنگ primary تعیین کنیم. این رنگ غالب (dominant) اپلیکیشن هست.

با استفاده از ابزار رنگ متریال دیزاینی که گوگل ایجاد کرده (

اینجا) میشه رنگ های primary dark و accent رو تعیین کرد و preview اون رو دید.

 

میشه رنگ های secondary رو هم تعیین کرد که البته این آپشنال هست. این در واقع رنگ پراگرس بار و floating button و اینا رو تعیین میکنه.

 

رنگ فونت برای هر دو primary و secondary رو میشه تعیین کرد و توی قسمت ACCESSIBILITY اگر رنگ فونت مناسب نباشه NOT LEGIBLE.

 

میشه رنگ ها رو توی فایل xml اکسپورت کرد و فایلشو مستقیم توی اندروید استودیو کپی کرد.

 

فیلم خوب در مورد نحوه تعیین رنگ اپلیکیشن

 


آخرین ارسال ها

آخرین وبلاگ ها

آخرین جستجو ها