جستجو در انجمن

در حال نمایش نتایج برای برچسب های 'اندروید'.



تنظیمات بیشتر جستجو

  • جستجو بر اساس برچسب

    برچسب ها را با , از یکدیگر جدا نمایید.
  • جستجو بر اساس نویسنده

نوع محتوا


برنامه نویسی اندروید | آموزش برنامه نویسی اندروید | آموزش اندروید

  • اندروید
    • ابزار های برنامه نویسی اندروید
    • آموزش برنامه نویسی اندروید
    • رفع مشکلات و سوالات
    • امنیت در اندروید
    • پروژه های اندروید
  • کاتلین (Kotlin)
    • آموزش های برنامه نویسی Kotlin
    • سوالات و رفع مشکلات Kotlin
  • React Native
    • آموزش React Native
    • آموزش Redux
    • رفع مشکلات و سوالات React Native
  • پشتیبانی اندروید
  • مباحث مرتبط با اندروید
    • ابزارها و سایتهای مفید
    • گرافیک موبایل
    • آموزش های ویدئویی
    • برنامه نویسی جاوا
  • تکنولوژی های اندروید
    • وب موبایل
    • توسعه اندروید با #C
    • توسعه اندروید با Basic4Android
  • متفرقه
    • اپلیکیش های ایرانی
    • برنامه نویسی
    • درخواست همکاری
    • مباحث متفرقه
    • مهارتهای فروش و بازاریابی
  • پشتیبانی محصولات مارکت
    • پرسش و پاسخ مرتبط با مارکت انجمن اندروید ایران
    • پشتیبانی مارکت پروژه های اندروید
    • پشتیبانی مارکت آموزش اندروید
    • پشتیبانی مارکت گرافیک موبایل
  • انجمن اندروید ایران
    • اخبار و اعلانات
    • اندروید Lollipop
    • صندوق پيشنهادات و انتقادات
    • اندروید marshmallow
    • تازه‌های دنیای کامپیوتر و فناوری
    • اندروید nougat
    • قوانین انجمن تخصصی اندروید ایران
    • اندروید Oreo

دسته ها

  • پروژه اندروید
    • سورس پروژه اندروید
    • کامپوننت های اندروید
    • کتابخانه های اندروید
  • آموزش اندروید
    • فیلم آموزشی کاربردی
    • مقالات آموزشی اندروید
  • گرافیک موبایل
    • قالب طراحی اپلیکیشن
  • اپلیکیشن های اندروید
    • کاربردی
    • کسب و کار
    • آموزش
    • کتاب‌ها و منابع
    • ویدئو و رسانه
    • بازی‌

تقویم ها

  • Community Calendar

255 نتیجه پیدا شد

  1. سلام من میخوام یک برنامه ای بنویسم که به کاربر هر روز بگه چند ساعت با موبایلش کار کرده حالا من یه کرنومتر گذاشتم که این رو حساب کنه ولی یه مشکلی دارم که نمیتونم عملیش کنم, کرنومتر وقتی که صفحه خاموش هست باید استاپ بشه و وقتی که صفحه روشن هست ادامه بده به زمان گرفتن.( به صورت سرویس ) با استفاده از isInterActive میدونم باید انجام بشه که یک مقدار بولین رو برمیگردونه که میگه صفحه روشنه یا نه, اما بلد نیستم که به چه صورت و کجا باید بزارمش!!! ممنون میشم کمک کنید
  2. وقتی با ران ادمین اجراش میخوام بکنم این ارورو میده ولی وقتی با دابل کیلیک میزنم اصلا اینم نشون نمیده چیزی نمایش پیدا نمیکنه یعنی اصلا اجرا نمیشه Could not find main class com/intellij/idea/main اگه کسی بلده چیکاد کنم لطفا بهم بگین❤❤
  3. وقتی با ران ادمین اجراش میخوام بکنم این ارورو میده ولی وقتی با دابل کیلیک میزنم اصلا اینم نشون نمیده چیزی نمایش پیدا نمیکنه یعنی اصلا اجرا نمیشه Could not find main class com/intellij/idea/main اگه کسی بلده چیکاد کنم لطفا بهم بگین❤❤
  4. با عرض ادب و احترام به تمامی دوستان اگر بخوایم بازدن مساوی پشت سر هم آخرین عملگر تکرار بشه و چنانچه بخواهیم با زدن 2+2 بدون این که مساوی رو بزنم4 رو نشون بده یعنی هی تکرار کنم +2 وخودش انگار که مساوی زدی جواب رو نمایش بده چی کار باید بکنم همه چیز کار می کنه به جز این دو مورد اگر میشه راه نمایی کنید New Text Document (3).txt
  5. درود بر دوستان اندروید استدیو رو نصب کردم . ولی به این دلیل ک از ای پی ایران نمیشه sdk رو مستقیم دانلود بکنه مجبور شدم sdk رو جداگانه دانلود کنم و به صورت دستی داخل اندروید استدیو بریزم. ولی امکانش نیست و مسیر دقیقشو بلد نیستم و هرجایی میزارم قبول نمیکنه( سیستم عامل مک هستش) نمیتونم از فیلتر شکن برای دانلود استفاده کنم فیلتر شکنم افت سرعت میده و حجم بالاست کسی میتونه راهنماییم کنه (با کمال احترام و خسته نباشید)
  6. نکات مهم در برنامه نویسی اندروید و جاوا. 1- فراموش نکنید که مقدار صفت android:updatePeriodMillis در تگ <appwidget-provider فایل xml/widget_info.xml بیانگر تایمری هست که کالبک onUpdate کلاس ویدجت صدا زده میشه. 2- در metadata ویدجت، مقدار صفت android:minHeight و android:minWidth تعیین کننده حداقل اندازه ویدجت هستش که باید 72dp (یعنی 1x1) باشه. ولی صفت android:layout_width و android:layout_height در layout ویدجت، تعیین کننده اندازه کنونی ویدجت هستش. 3- از انجایی که List متدی برای اضافه کردن عنصر نداره و سایزش هم ثابت هست، برای تبدیل Array به ArrayList باید به این روش عمل کنید: ArrayList<String> _arrayList = new ArrayList<String>(Arrays.asList(myArray)); 4- برای چک کردن وجود یک مقدار در آرایه کافیست به این صورت عمل کنید: Arrays.asList(myArray).contains(targetValue); 5- نکته جزیی: فراموش نکنید که HashMap در جاوا در واقع همون data structure هستش و نه آرایه! 6- نکته جزیی: زمانی از LinkedList استفاده کنید که قراره تعداد بسیار زیادی عملیات add/remove انجام بشه و نه عملیات random access. 7- نکته جزیی: متد length برای گرفتن طول String و متد length() برای گرفتن طول Array استفاده میشه. 8- همیشه در طراحی لیست/آرایه Boolean از BitSet استفاده کنید. BitSet سی پی یو و مموری cache friendly هستش. 9- آیا می دونید هر Object در جاوا 16 بایت فضا اشغال میکنه؟ 12 بایت برای خود شی و 4 بایت برای هدر شی. بدون متد و فیلد. 10- آیا می دونید String x = new String("abc"); با String y = new String("abc"); برابر(==) نیست؟ 11- هیچ کدام از کالبک های موجود در کلاس ویدجت(AppWidgetProvider) نیاز به صدازدن Superclass ها ندارن، بجز کالبک onReceive. (چون خالی هستن) 12- جدول زیر، لیست مواردی هست که درکجا باید از Context نوع Application یا Activity استفاده کنید: مورد/نوع Application Activity Toast X Dialogs / Views X Intent/Activity X Layout inflation X Service X Send broadcast X X Broadcast Receiver X X Resource values X 13- نکته جزیی: آیا می دونید android.util.Patterns.IP_ADDRESS فقط IPv4 رو شامل میشه؟ 14- نکته جزیی: با uninstall شدن برنامه، cache و تنظیمات برنامه هم حذف خواهند شد. 15- توسط متد ActivityManager.clearApplicationUserData() در اندروید 4.4 به بعد می تونید data تنظیمات برنامه رو حذف کنید. 16- هنگام کار با WebView، برای امنیت بیشتر بهتره تنظیمات setJavaScriptEnabled, setGeolocationEnabled, setAllowFileAccess رو false قرار بدید. 17- برنامه هایی که با یک کلید Sign شده و همگی از shared user Id یکسانی استفاده می کنن(در فایل AndroidManifest.xml) می تونن از فایلهای private یکدیگر استفاده کنن. 18- از اونجایی که جاوا از optional parameter پشتیبانی نمی کنه، به روش زیر می تونید این قابلیت رو شبیه سازی کنید: public void myMethod(final Object object, final boolean... enabled) { // ... if (enabled[0]) { // خخخخخخ } return; } 19- سعی کنید متغیرهای کلاس رو در خارج از متد constructor آماده سازی/Initialize کنید. (اینها مقادیر پیشفرض دارن و حتی قبل از اینکه سازنده کلاس صدا زده بشه مقدار دهی می شوند. پس دوباره به اونها مقدار ندید. بعلاه خوانایی کلاس راحت تر و سریع تر انجام میشه) 20- صفت android:layout_gravity محل قرار گیری (کل) ویدجت رو تعیین می کنه و صفت android:gravity محل قرارگیری محتوای ویدجت رو تعیین می کنه. 21- یادتون باشه که: فایلهای layout فقط برای طراحی قالب و چهارچوب صفحات برنامه هستن، styles.xml برای شکل دهی به عناصر قالب، dimens.xml برای تعیین اندازه و ابعاد عناصر، colors.xml برای رنگ بندی عناصر، strings.xml برای متون موجود در عناصر و... هستند. پس در ترکیب و قرارگیری اینها دقت کنید. 22- تغییر رفتار و امکانات keyboard اندروید در مقابل مقدار صفت inputype عنصر EditText: <EditText android:id="@+id/et_test" android:inputType="?????"/> نوع inputtype نوع Keyboard رفتار دکمه Enter شکلک Case حروف Suggestion کاراکترهای اضافی textLongMessage الفبا / پیشفرض ارسال / بعدی دارد lowercase دارد , و . و همه چیز textFilter الفبا / پیشفرض ارسال / بعدی دارد lowercase ندارد , و . و همه چیز textCapWords الفبا / پیشفرض ارسال / بعدی دارد Camel Case دارد , و . و همه چیز textCapSentences الفبا / پیشفرض ارسال / بعدی دارد Sentence case دارد , و . و همه چیز time اعداد ارسال / بعدی ندارد - ندارد فقط : textMultiLine الفبا / پیشفرض خط بعدی دارد lowercase دارد , و . و همه چیز number اعداد ارسال / بعدی ندارد - ندارد ندارد textEmailAddress الفبا / پیشفرض ارسال / بعدی ندارد lowercase ندارد @ و . و همه چیز بدون نوع الفبا / پیشفرض خط بعدی دارد lowercase دارد , و . و همه چیز textPassword الفبا / پیشفرض ارسال / بعدی ندارد lowercase ندارد , و . و همه چیز text الفبا / پیشفرض ارسال / بعدی دارد lowercase دارد , و . و همه چیز textShortMessage الفبا / پیشفرض شکلک دارد lowercase دارد , و . و همه چیز textUri الفبا / پیشفرض ارسال / بعدی ندارد lowercase ندارد / و . و همه چیز textCapCharacters الفبا / پیشفرض ارسال / بعدی دارد UPPERCASE دارد , و . و همه چیز phone اعداد ارسال / بعدی ندارد - ندارد * # . - / () W P N , + textPersonName الفبا / پیشفرض ارسال / بعدی دارد lowercase دارد , و . و همه چیز نکته: در صورتی که تنظیم Auto-capitalization در تنظیمات Keyboard فعال باشه، Case حروف رفتار پیشفرض خواهد داشت، در غیر اینصورت همه حروف کوچیک خواهند شد. نکته 2: زبان نوع Keyboard اعداد همگی انگلیسی 1234567890 می باشد. نکته 3: در صورتی که تنظیم Correction/Suggestion در تنظیمات Keyboard فعال باشه، Suggestion بدرستی رفتار خواهد کرد، درغیر اینصورت در همه موارد خاموش خواهد ماند. 23- مقدار center با مقدار center_vertical|center_horizontal و مقدار fill با مقدار fill_vertical|fill_horizontal در صفت android:gravity و صفت android:layout_gravity برابر هست. 24- برای حل مشکل موقعیت متن EditText در اندروید 5.0 کافیه مقدار صفت android:spacing رو 0dp قرار بدید. 25- برای نمایش تصاویر بسیار بزرگ(بیشتر از 2000 پیکسل) بهترین گزینه استفاده از WebView هستش. 26- رفتارهای متفاوت مقادیر FIT_CENTER و CENTER_INSIDE در صفت android:scaleType: - اگر تصویر بزرگتر از container باشه، مقدار FIT_CENTER و CENTER_INSIDE رفتار یکسانی خواهند داشت. - اگر تصویر کوچکتر از container باشه، مقدار FIT_CENTER تصویر رو scale خواهد کرد. - اگر تصویر کوچکتر از container باشه، مقدار CENTER_INSIDE تصویر رو بدون تغییر در مرکز قرار خواهد داد. 27- کاربرد تگ include با ویدجت ViewStub متفاوته! تگ include صرفاً محتوای XML فایل دیگر رو در جایی دیگر ضمیمه می کنه. ولی ویدجت ViewStub کلکسیونی از ویدجت ها می تونه باشه که در زمان نیاز نمایش یا مخفی شون کنه. 28- خلاصه اصطلاحاتی درباب سایز و کیفیت صفحه دستگاه اندروید: Screen size: بیانگر سایز فیزیکی صفحه دستگاه هستش که برای layout و ویدجت ها استفاده میشه. گروه بندی: small, normal, large, extra-large Screen density / DPI: بیانگر تراکم پیکسل های موجود در صفحه دستگاه هستش که به DPI یا همون Dot Per Inch معروفه. برای مثال دستگاهی با DPI low فقط تعداد اندکی پیکسل در صفحه فیزیکیش وجود داره پس تصاویر هم از کیفیت پایینی برخوردار هستن... گروه بندی: low-dpi, medium-dpi, high-dpi, xhigh-dpi, xxhigh-dpi, x*xxhigh-dpi (برای دسته بندی تصاویر و گرافیک استفاده میشه) Orientation: بیانگر شیوه نمایش به کاربر هستش. گروه بندی: ایستاده/portrait, خوابیده/landscape Resolution: بیانگر تعداد کل پیکسل های موجود در صفحه دستگاه هستش. گروه بندی: 320x240, 480x320, 800x480 و... Inch: بیانگر قطر فیزیکی صفحه هستش که از رادیکال ((طول*2)+(عرض*2)) بدست میاد. گروه بندی: 4.4", 4.7", 5", 10", 15" و... 29- نکته جزیی: از واحد sp فقط برای اندازه متون/font و از واحد dp برای اندازه ویدجت ها باید استفاده بشه. 30- شیوه صحیح و کوتاه full screen کردن Dialog: _dialog = new Dialog(this, LayoutParams.MATCH_PARENT); یا _dialog.getWindow().setLayout(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT); یا _dialog = new Dialog(this, WindowManager.LayoutParams.FLAG_FULLSCREEN); 31- در صورتی که پیچیدگی در عناصر صفحه برنامه وجود نداره، بجای RelativeLayout از LinearLayout استفاده کنید... به دلیل اینکه: 1- در LinearLayout عناصر Visibility.GONE و Visibility.VISIBLE شده بدرستی در کنار هم قرار میگیرن، ولی در RelativeLayout خیر. 2- در دستگاه های کوچیک، عناصر موجود در LinearLayout ثابت و منظم می مونن ولی عناصر موجود در RelativeLayout با به هم ریختگی بر روی هم قرار می گیرن. 3- برای تنظیم عناصر در LinearLayout نیازی به تعریف ID برای عناصر نیست، ولی در RelativeLayout نیاز هست تا تک تک عناصر ID گذاری بشن. 4- LinearLayout قابلیت تنظیم weight داره، ولی RelativeLayout نداره. 32- رایجترین resolution های دستگاه های اندروید: 240x320, 320x480, 480x800, 540x960, 640x360, 600x1024, 768x576, 800x400, 960x540, 1024x600, 1280x720, 1280x800, 1366x768, 1440x904, 1600x1200, 1920x1080, 1920x1200, 2048x1536, 2560x1440, 2560x1600 33- از آنجایی که کلاس های Anonymous سازنده ندارن، بهترین راه استفاده از instance initializers هستش. 34 - یادتون باشه که تقدم اجرای initializer ها در یک کلاس همیشه بصورت: Static initializer -> Instance initializer -> Constructor هستش. public class MyClass { // Constructor initializer public MyClass() { // #3 } // Static initializer static { // #1 } // Instance initializer { // #2 } } 35- یک دلیل رخداد خطای Performing stop of activity that is not resumed میتونه متغیرهای اکتیویتی باشن که توسط اندروید آزاد/free شده و اکتیویتی شما دیگر به مقدار اصلی/نهایی متغیر دسترسی نداره... لذا مقدار متغیر به پیشفرض/default تغییر کرده. (البته این مسله زمانی رخ میده که سیستم اندروید نیازمند حافظه بیشتری برای برنامه foreground داشته باشه، بنابراین توسط پاکسازی حافظه برنامه های background تامینش میکنه) 36- فقط زمانی متدهای setter/getter رو پیاده سازی کنید که در متد پردازش یا محاسباتی صورت میگیره... درغیر این صورت باید از field استفاده کنید که سرعتش هم 3 برابر بیشتر از متد هستش. (مگر اینکه نیاز به تصریح در Interface رو داشته باشید) 37- اگر در جاوا 5 به قبل، کلاس Thread رو instantiate کنید و متد start() ش رو صدا نزنید، memory leak انجام دادید! 38- دلیل رخداد خطای error: Error retrieving parent for item: No resource found that matches در برنامه Eclipse، نسخه اندروید و theme ای هست که انتخاب کردید... برای نمونه تم Holo در اندروید 2 موجود نیست و در صورت ایجاد پروژه با این مشخصات با این خطا مواجه میشید. 39- هرگز اطلاعات حساس و مهم رو بر روی SD Card ذخیره نکنید، مگر بکمک encryption و سطح دسترسی MODE_PRIVATE. 40- حتاالمکان سطح دسترسی ContentProvider برنامه رو محدود یا کلاً غیرفعال کنید... برای اینکار کافیه مقدار صفت android:exported در تگ activity رو false قرار بدید: <activity android:name="mypackage.myapp.myactivity" android:exported="false"> ... </activity> این کلاس ContentProvider، امکان دسترسی و اشتراک گذاری اطلاعات و دیتای برنامه شمارو برای دیگر برنامه ها فراهم میکنه. بنابراین لازمه که سطح دسترسیش محدود بشه. توجه: در اندروید نسخه 4.1 به قبل، بطور پیشفرض مقدار این صفت public هستش و در اندروید نسخه 4.2 به بعد مقدار این صفت private یا همون false هستش. ویرایش نرده استیل آکات
  7. سلام من دارم یک اپلیکیشن اندروید درست می کنم که یک بانک فیلم هست و قابلیت لایک و کامنت هم داره به نطر شما چه هاست یا سروری براش خوبه؟
  8. جهت ساخت اپلیکیشنی برای انداوید جهت ارتباط با ماشین آلات از طریق درگاه بلوتوپ و وای فای به یک برنامه نویس اندروید نیاز داریم. سرعت ، دقت و تعهد در انجام کار ضروری می باشد. سورس برنامه نیز باید قابل ارائه باشد. محل پروژه اصفهان 09360107546
  9. با سلام خدمت همه ی دوستان و اساتید گرامی دوستان ! من مدتی هست شروع به یاد گیری برنامه نویسی اندروید کردم . الان دارم از روی یک کتاب برنامه نویسی اندروید رو یاد می گیرم. اما واقعا یادگیری برنامه نویسی اندروید از روی کتاب خیلی سخته. تصمیم دارم در یک دوره مجازی شرکت کنم. اصلا برام مهم نیست نقدی باشه یا رایگان . برام مهمه که جامع باشه ، مطالبش به روز باشه و بعد از دوره من رو برای بازار کار آماده کنه. خیلی از دوره ها رو دیدم اما واقعا نمی دونم کدوم رو انتخاب کنم. کسی هست من رو راهنمایی کنه که کدوم دوره رو خریداری کنم ؟ با تشکر ...
  10. سلام من میخوام یا برنامه تبدیل واحد بنویسم. چجوری میشه برای edittext تعریف کرد که فقط عدد میشه وارد کرد و علامت منفی هم فقط یکبار قابل استفاده اونم اوله عدد؟ کد زیر رو استفاده کردم اما مشکلش اینه که منفی رو همه جا و به هر تعداد میشه درج کرد و همینطور ممیز هم نامحدود میشه استفاده کرد . کسی راه حلی داره؟ <EditText android:id="@+id/myNumber" android:digits="0123456789." android:inputType="numberDecimal"
  11. سلام وقتی با شماره تلفن یا ایمیل توی یه برنامه لاگین میکنن برای دفعات بعد از کجا باید فهمید که کاربر لاگین کرده یا نه تقریبا بلدم چیکار کنم ولی به نظرم امنیت نداره راه امنش چیه؟
  12. آیا تا به حال شده که بعد از ارائه اپلیکشن پیغامهایی از طرف کاربران دریافت کنید که ناشی از بسته شدن اپ در حین کار باشه؟ در اینگونه مواقع علاوه بر زمانبر بودن پیدا کردن خطا، شاهد ریزش شدید کاربران اپ خواهید بود. پس بهتر است قبل از ارائه اپ در بازار یا Google Play تمهیداتی را برای اطلاع از پیغامهای احتمالی در نظر بگیرید. یکی از ابزارهای بسیار مفید استفاده کردن از کتبخانه هایی هست مه برای انجام این کار در نظر گرفته شده است، به عنوان مثال کتابخانه ACRA این کار را با ارسال ایمیل برای شما به راحتی انجام میدهد. استفاده کردن از این کتابخانه بسیار راحت هست. در قدم اول باید کتابخانه ACRA را به عنوان dependency به build.gradle اضافه کنید: compile 'ch.acra:acra:4.9.2' در قدم بعدی کلاس Application را بسازید و متدهای مربوطه برای ACRA را در آن پیاده سازی کنید: @ReportsCrashes( formUri = "", mailTo = "yourmail@yourdomain.com", customReportContent = { ReportField.APP_VERSION_CODE, ReportField.APP_VERSION_NAME, ReportField.ANDROID_VERSION, ReportField.PHONE_MODEL, ReportField.BRAND, ReportField.CUSTOM_DATA, ReportField.INITIAL_CONFIGURATION, ReportField.CRASH_CONFIGURATION, ReportField.USER_CRASH_DATE, ReportField.STACK_TRACE, ReportField.LOGCAT}, resToastText = R.string.crash_toast_text, mode = ReportingInteractionMode.TOAST) public class MyApplication extends Application { @Override public void onCreate() { super.onCreate(); ACRA.init(this); } } در بخش ReportField همانطور که میبینید، اطلاعاتی که قرار است به ایمیلتان ارسال گردد را وارد میکنیم. در قدم آخر فایل Manifest را باز کرده و دسترسی های مربوطه و همچنین کلاس Application را در تگ application وارد کنید: <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.acrademo"> <uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.READ_PHONE_STATE" /> <uses-permission android:name="android.permission.READ_LOGS" /> <application android:name=".MyApplication" android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:supportsRtl="true" android:theme="@style/AppTheme"> <activity android:name=".MainActivity"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application> </manifest> برای تست عملکرد کدها، یک دکمه بسازید و سپس کدهایی را برای آن وارد کنید که باعث کرش شدن اپ گردد... public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } public void onCrash(View view){ throw new RuntimeException("App Crashed"); } } منبع: www.asifmoinulislam.com
  13. با سلام من یه برنامه مسیر یابی و از Google Maps Directions API استفاده میکنم از فیلتر سکن هم استفاده مینکم زمانی که خروجی میگیرم و روی گوشی نصب میکنم بعضی مواقع کار نمیکنه و نیاز به فیلتر سکن هست در صورتی که برنامه هایی هستن که بخوبی کار میکنند چطوری مشکل حل کنم DISABLE
  14. سلام دوستان . خسته نباشید . من به تازگی تصمیم به یادگیری اندروید گرفتم ولی خب متاسفانه همین اول را به مشکلی خوردم که درست بشو نیست به زبان انگلیسی هم سرچ کردم ولی جایی جواب درستی نبود . مشکل من اینه که همون اولی که اندروید استودیو رو باز میکنم این ارور میاد Error:Failed to find Build Tools revision 26.0.2 پیر شدم سر این . حالا روش هایی که امتحان کردم هم زیاد بوده ولی جواب نبوده مثلا تو stackoverflow گفته بود که برو تو project structure بعد تو properties و اونجا ورژن build tools رو عوض کن . در صورتی که اصلا در project structure من اصلا properties نیست . یک جای دیگه گفته بود که این خط رو به build.gradle اضافه کن درست میشه buildToolsVersion "24.0.0" اضافه کردم و هیچ عملی نکرد باز هم همون ارور وقتی دیدم راهی نداره گفتم باید این فایل رو دانلود کنم چندین جا گشتم و نبود ولی یک جا پیدا کردم دانلود کردم و extract کردم تو پوشه build tools ولی جوابی نبود و همون ارور میومد . الان راه چیه ؟ اگی فایلی هست که شما میدونین بگین تا دانلود کنم
  15. سلام وقت بخیر دوستان کسی میدونه این با چه کتابخونه ای ساخته شده؟ 20180305_184518.mp4
  16. سلام دارم برنامه فروشگاهی میسازم انتخاب قیمت محصول جوریه که کاربر خودش باید انتخاب کنه از بین چند تا مورد این فایلی که فرستادم ببینین متوجه منظورم میشین من داخل برنامه دو تا اسپینر گذاشتم که اطلاعاتش رو از سرور میگیرم و داخل اسپینر ست میکنم که با انتخاب هر کدوم ای دی خودشو برمیگردونه تا اینجا درسته مشکلی نیست ولی برنامه ی لیست قیمت داره که براساس ای دی این دوتا اسپینرباید مشخص بشه یعنی مثلا اسپینر اول ای دی 5 برگردونه و اسپینر دوم ای دی مثلا3 اینجا باید ما سرچ بزنیم تو لیست قیمت ها که ای دی 5و3 قیمتش چنده ... به نظرتون اینو چجوری پیاده کنم ایا میشه تو arraylist بریزم و روش حالت سرچ بذارم و اندیس رو برگردونه. اصلا میشه با arraylist همچین کاری کرد؟ یا تو دیتابیس بریزم؟ دوستان اگه راه حل بهتری دارن لطفا راهنمایی کنن ممنون جیسون قیمت ها به این شکله [ { "cat": "1", "type": "0", "size": "33", "price": "4800" }, { "cat": "1", "type": "0", "size": "34", "price": "7200" }, ] 20180305_163147.mp4
  17. سلام خسته نباشید من یه اپ دیکشنری میخواهم بسازم که اطلاعات را از دیتابیس سرور بگیره و یه دکمه آپدیت درون برنامه اندروید بذارو و وقتی که روی دکمه کلیک شد بره و اطلاعات رو از دیتابیس سرور بخونه و بریزه تو دیتابیس اندروید و ذخیره کنه … یعنی با هر بار اعمال تغییر در دیتابیس سرور و با کلیک شدن روی این دکمه اطلاعات دیتابیس برنامه به روز و شود و درون ریسایکلر ویو نشان داده شود … تشکر
  18. سلام وقت همگی بخیر من یک دیتا بیس دارم حدود 10 هزار ردیف و بیست ستون هست میخواهم از طریق چک باکس مشخص کنم در کدام ستون جستجو کند لطفا در صورت امکان کدنویسی مربوط اتصال به دیتابیس و سایر مواردی که مورد نیاز هست بفرمایید\ من یک تازه کارم متشکرم
  19. سلام به همه دوستان عزیز من می خواهم در یک صفحه اول برنامه این نمایش داده بشه مثلا سلام صبح بخیر امروز سه شنبه 24 بهمن 1396 اینهای که رنگی کردم بر اساس ساعت و تاریخ به روز گوشی تغیر کند لطفا راهنمایی کنید مرسی از همگی دوستان
  20. سلام خدمت اساتید گرامی . من یه برنامه نوشتن که برای یادگیری لغاته . وقتی کاربر لغتی رو به بخش علاقه مندی اضافه می کنه لغت نمایش داده نمیشه و باید برنامه رو مجدد اجرا کرد تا لغت انتخاب شده به بخش علاقه مندی اضافه/ حذف بشه . همچنین بعد از هر بار اجرا لیست لغات تکرار میشه ( مثلا بار دوم از هر کدوم 2 سری بار سوم از هرکدوم 3 سری و ... ) ایجاد میشه . ممنون میشم راهنماییم کنید . package farmani.com.essentialwordsforielts.mainPage; import android.Manifest; import android.content.Context; import android.content.DialogInterface; import android.content.Intent; import android.content.pm.PackageManager; import android.database.Cursor; import android.database.sqlite.SQLiteDatabase; import android.os.Build; import android.os.Environment; import android.support.annotation.NonNull; import android.support.design.widget.NavigationView; import android.support.design.widget.TabLayout; import android.support.v4.app.ActivityCompat; import android.support.v4.content.ContextCompat; import android.support.v4.view.ViewPager; import android.support.v4.widget.DrawerLayout; import android.support.v7.app.AlertDialog; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.Gravity; import android.view.MenuItem; import android.view.View; import android.widget.ImageView; import android.widget.Toast; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.util.ArrayList; import farmani.com.essentialwordsforielts.R; import farmani.com.essentialwordsforielts.search.ActivitySearch; public class MainActivity extends AppCompatActivity { public static Context context; public static ArrayList<Structure> list = new ArrayList<>(); public static ArrayList<Structure> favorite = new ArrayList<>(); DrawerLayout drawerLayout; NavigationView navigationView; ImageView hamburger; SQLiteDatabase database; String destPath; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.navigation_activity_main); if (Build.VERSION.SDK_INT >= 23) { if (ContextCompat.checkSelfPermission(MainActivity.this, Manifest.permission.READ_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) { ActivityCompat.requestPermissions(MainActivity.this , new String[]{Manifest.permission.READ_EXTERNAL_STORAGE , Manifest.permission.WRITE_EXTERNAL_STORAGE} , 1); } else if (ContextCompat.checkSelfPermission(MainActivity.this, Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) { ActivityCompat.requestPermissions(MainActivity.this , new String[]{Manifest.permission.READ_EXTERNAL_STORAGE , Manifest.permission.WRITE_EXTERNAL_STORAGE} , 1); } else { setupDB(); selectList(); selectFavorite(); Toast.makeText(MainActivity.this, "You grandet earlier", Toast.LENGTH_LONG).show(); } } if (!favorite.isEmpty()){ favorite.clear(); selectFavorite(); } else if (!list.isEmpty()){ list.clear(); selectList(); } context = getApplicationContext(); setTabOption(); drawerLayout = findViewById(R.id.navigation_drawer); navigationView = findViewById(R.id.navigation_view); hamburger = findViewById(R.id.hamburger); hamburger.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { drawerLayout.openDrawer(Gravity.START); } }); navigationView.setNavigationItemSelectedListener(new NavigationView.OnNavigationItemSelectedListener() { @Override public boolean onNavigationItemSelected(@NonNull MenuItem item) { int id = item.getItemId(); if (id == R.id.exit) { AlertDialog.Builder alertDialog = new AlertDialog.Builder( MainActivity.this); alertDialog.setTitle(R.string.exit); alertDialog.setMessage(R.string.exit_ask); alertDialog.setCancelable(false); alertDialog.setPositiveButton(R.string.yes, new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int which) { finish(); } }); alertDialog.setNegativeButton(R.string.no, new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int which) { dialog.cancel(); } }); alertDialog.show(); } if (id == R.id.search) { Intent intent = new Intent(MainActivity.this, ActivitySearch.class); MainActivity.this.startActivity(intent); } return true; } }); } @Override public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { switch (requestCode) { case 1: { if (grantResults.length >= 2 && grantResults[0] == PackageManager.PERMISSION_GRANTED && grantResults[1] == PackageManager.PERMISSION_GRANTED) { Toast.makeText(MainActivity.this, "Access granted", Toast.LENGTH_LONG).show(); } } } } @Override public void onBackPressed() { if (drawerLayout.isDrawerOpen(Gravity.START)) { drawerLayout.closeDrawer(Gravity.START); } else { AlertDialog.Builder alertDialog = new AlertDialog.Builder( MainActivity.this); alertDialog.setTitle(R.string.exit); alertDialog.setMessage(R.string.exit_ask); alertDialog.setCancelable(false); alertDialog.setPositiveButton(R.string.yes, new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int which) { finish(); } }); alertDialog.setNegativeButton(R.string.no, new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int which) { dialog.cancel(); } }); alertDialog.show(); } } private void setTabOption() { ViewPager viewPager = findViewById(R.id.viewpager); viewPager.setAdapter(new AdapterFragment(getSupportFragmentManager(), context)); TabLayout tabStrip = findViewById(R.id.tabs); tabStrip.setupWithViewPager(viewPager); } private void setupDB() { try { destPath = Environment.getExternalStorageDirectory().getAbsolutePath() + "/ielts/"; File file = new File(destPath); if (!file.exists()) { file.mkdirs(); file.createNewFile(); CopyDB(getBaseContext().getAssets().open("md_book.db"), new FileOutputStream(destPath + "/md_book.db")); } } catch (IOException e1) { e1.printStackTrace(); } } @Override protected void onResume() { super.onResume(); if (!favorite.isEmpty()){ favorite.clear(); selectFavorite(); } else if (!list.isEmpty()){ list.clear(); selectList(); } } private void CopyDB(InputStream inputStream, OutputStream outputStream) throws IOException { byte[] buffer = new byte[1024]; int length; while ((length = inputStream.read(buffer)) > 0) { outputStream.write(buffer, 0, length); } inputStream.close(); outputStream.close(); } private void selectFavorite() { database = SQLiteDatabase.openOrCreateDatabase(destPath + "/md_book.db", null); Cursor cursor = database.rawQuery("SELECT * FROM main WHERE fav = 1", null); while (cursor.moveToNext()) { String word = cursor.getString(cursor.getColumnIndex("word")); String definition = cursor.getString(cursor.getColumnIndex("definition")); String trans = cursor.getString(cursor.getColumnIndex("trans")); String img = cursor.getString(cursor.getColumnIndex("img")); int id = cursor.getInt(cursor.getColumnIndex("id")); Structure struct = new Structure(word, definition, trans, img, id); struct.setWord(word); struct.setDefinition(definition); struct.setTrans(trans); struct.setImg(img); struct.setId(id); favorite.add(struct); } } private void selectList() { database = SQLiteDatabase.openOrCreateDatabase(destPath + "/md_book.db", null); Cursor cursor = database.rawQuery("SELECT * FROM main", null); while (cursor.moveToNext()) { String word = cursor.getString(cursor.getColumnIndex("word")); String definition = cursor.getString(cursor.getColumnIndex("definition")); String trans = cursor.getString(cursor.getColumnIndex("trans")); String img = cursor.getString(cursor.getColumnIndex("img")); int id = cursor.getInt(cursor.getColumnIndex("id")); Structure struct = new Structure(word, definition, trans, img, id); struct.setWord(word); struct.setDefinition(definition); struct.setTrans(trans); struct.setImg(img); struct.setId(id); list.add(struct); } } }
  21. سلام وقت بخیر من یک آپ میخواهم طراحی کنم که کاربر بتونه ساولش را بپرسه و کاربران جواب بدن و بتونن آن را لایک کنن . پنج قسمت داره مثلا = ریاضی - علوم - فارسی - قران-شیمی روی ریاضی کلیک کنه وارد اون بخش بشه تمام سوالات مطرح شده را ببینه بتونه روش کلیک کنه و جوابها را ببینه و بتونه لایک و خودش بتونه سوال طرح کنه لطفا منو راهنمایی کنید ممنونم
  22. سلام بنده در اکتیویتی دوم یدونه تب لایوت انداختم که چهارتا تب داره میخوام وقتی از اکتیویتی اول رفتم به اکتیویتی دوم ی تب خاص رو اول نشون بده مثلا تب دوم ولی همیشه تب اول از سمت چپ که اندیسش صفره رو اول نشون میده گفتن با این کد tableLayout.getTabAt(2); میشه ولی نشد ...راه دیگه ای هست دوستان؟
  23. سلام به همه اساتید گرامی . من یه برنامه کتاب نوشتم که از دیتابیس خارجی استفاده کردم . و چون از API 26 استفاده کردم باید حتما واسه کپی دیتابیس دسترسی بگیره . الان مشکلم اینجاست که بار اول برنامه به محض اجرا کرش میشه ولی صفحه دسترسی همچنان موجوده و پس از تایید و اجرای برنامه دیگه مشکلی نیست و برنامه به درستی اجرا میشه . کد برنامه رو براتون میفرستم ممنون میشم کمکم کنید . package farmani.com.essentialwordsforielts.mainPage; import android.Manifest; import android.content.Context; import android.content.DialogInterface; import android.content.pm.PackageManager; import android.database.Cursor; import android.database.sqlite.SQLiteDatabase; import android.os.Build; import android.os.Environment; import android.support.annotation.NonNull; import android.support.design.widget.NavigationView; import android.support.design.widget.TabLayout; import android.support.v4.app.ActivityCompat; import android.support.v4.content.ContextCompat; import android.support.v4.view.ViewPager; import android.support.v4.widget.DrawerLayout; import android.support.v7.app.AlertDialog; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.Gravity; import android.view.MenuItem; import android.view.View; import android.widget.ImageView; import android.widget.Toast; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.util.ArrayList; import farmani.com.essentialwordsforielts.R; public class MainActivity extends AppCompatActivity { public static Context context; DrawerLayout drawerLayout; NavigationView navigationView; ImageView hamburger; SQLiteDatabase database; String destPath; public static ArrayList<Structure> list = new ArrayList<Structure>(); public static ArrayList<Structure> favorite = new ArrayList<Structure>(); @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.navigation_activity_main); if(Build.VERSION.SDK_INT >= 23){ if(ContextCompat.checkSelfPermission(MainActivity.this, Manifest.permission.READ_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED){ ActivityCompat.requestPermissions(MainActivity.this , new String[]{Manifest.permission.READ_EXTERNAL_STORAGE ,Manifest.permission.WRITE_EXTERNAL_STORAGE} , 1); }else if(ContextCompat.checkSelfPermission(MainActivity.this, Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED){ ActivityCompat.requestPermissions(MainActivity.this , new String[]{Manifest.permission.READ_EXTERNAL_STORAGE ,Manifest.permission.WRITE_EXTERNAL_STORAGE} , 1); }else { Toast.makeText(MainActivity.this,"You grandet earlier",Toast.LENGTH_LONG).show(); } } try { destPath = Environment.getExternalStorageDirectory().getAbsolutePath() + "/ielts/"; File file = new File(destPath); if (!file.exists()) { file.mkdirs(); file.createNewFile(); CopyDB(getBaseContext().getAssets().open("md_book.db"), new FileOutputStream(destPath + "/md_book.db")); } } catch (IOException e1) { e1.printStackTrace(); } context = getApplicationContext(); setTabOption(); drawerLayout = findViewById(R.id.navigation_drawer); navigationView = findViewById(R.id.navigation_view); hamburger = findViewById(R.id.hamburger); hamburger.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { drawerLayout.openDrawer(Gravity.START); } }); navigationView.setNavigationItemSelectedListener(new NavigationView.OnNavigationItemSelectedListener() { @Override public boolean onNavigationItemSelected(@NonNull MenuItem item) { int id = item.getItemId(); if (id == R.id.exit) { AlertDialog.Builder alertDialog = new AlertDialog.Builder( MainActivity.this); alertDialog.setTitle(R.string.exit); alertDialog.setMessage(R.string.exit_ask); alertDialog.setCancelable(false); alertDialog.setPositiveButton(R.string.yes, new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int which) { finish(); } }); alertDialog.setNegativeButton(R.string.no, new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int which) { dialog.cancel(); } }); alertDialog.show(); } return true; } }); selectList(); selectFavorite(); } @Override public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { switch (requestCode) { case 1: { if (grantResults.length >= 2 && grantResults[0] == PackageManager.PERMISSION_GRANTED && grantResults[1] == PackageManager.PERMISSION_GRANTED) { Toast.makeText(MainActivity.this, "Access granted", Toast.LENGTH_LONG).show(); } } } } @Override public void onBackPressed() { if (drawerLayout.isDrawerOpen(Gravity.START)) { drawerLayout.closeDrawer(Gravity.START); } else { AlertDialog.Builder alertDialog = new AlertDialog.Builder( MainActivity.this); alertDialog.setTitle(R.string.exit); alertDialog.setMessage(R.string.exit_ask); alertDialog.setCancelable(false); alertDialog.setPositiveButton(R.string.yes, new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int which) { finish(); } }); alertDialog.setNegativeButton(R.string.no, new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int which) { dialog.cancel(); } }); alertDialog.show(); } } private void setTabOption() { ViewPager viewPager = findViewById(R.id.viewpager); viewPager.setAdapter(new AdapterFragment(getSupportFragmentManager(), context)); TabLayout tabStrip = findViewById(R.id.tabs); tabStrip.setupWithViewPager(viewPager); } private void CopyDB(InputStream inputStream, OutputStream outputStream) throws IOException { byte[] buffer = new byte[1024]; int length; while ((length = inputStream.read(buffer)) > 0) { outputStream.write(buffer, 0, length); } inputStream.close(); outputStream.close(); } private void selectFavorite(){ database = SQLiteDatabase.openOrCreateDatabase(destPath + "/md_book.db", null); Cursor cursor = database.rawQuery("SELECT * FROM main WHERE fav = 1", null); while (cursor.moveToNext()){ String word = cursor.getString(cursor.getColumnIndex("word")); String definition = cursor.getString(cursor.getColumnIndex("definition")); String trans = cursor.getString(cursor.getColumnIndex("trans")); String img = cursor.getString(cursor.getColumnIndex("img")); int id = cursor.getInt(cursor.getColumnIndex("id")); Structure struct = new Structure(word, definition, trans, img, id); struct.setWord(word); struct.setDefinition(definition); struct.setTrans(trans); struct.setImg(img); struct.setId(id); favorite.add(struct); } } private void selectList(){ database = SQLiteDatabase.openOrCreateDatabase(destPath + "/md_book.db", null); Cursor cursor = database.rawQuery("SELECT * FROM main", null); while (cursor.moveToNext()){ String word = cursor.getString(cursor.getColumnIndex("word")); String definition = cursor.getString(cursor.getColumnIndex("definition")); String trans = cursor.getString(cursor.getColumnIndex("trans")); String img = cursor.getString(cursor.getColumnIndex("img")); int id = cursor.getInt(cursor.getColumnIndex("id")); Structure struct = new Structure(word, definition, trans, img, id); struct.setWord(word); struct.setDefinition(definition); struct.setTrans(trans); struct.setImg(img); struct.setId(id); list.add(struct); } } }
  24. سلام برای ارسال عکس به سمت سرور بنده از کتابخونه volley استفاده کردم اگه عکس حجمش زیر 1مگ باشه ارسال میشه مشکلب نداره ولی اگه حجم عکس 1 مگ به بالا باشه برنامه کرش میکنه میاد بیرون من از این تکه کد استفاده کردم دوستان راهنمایی کنید چیکار باید انجام بدم ممنون public String getStringImage(Bitmap bitmap) { Log.i("MyHitesh", "" + bitmap); ByteArrayOutputStream baos = new ByteArrayOutputStream(); bitmap.compress(Bitmap.CompressFormat.JPEG, 100, baos); byte[] b = baos.toByteArray(); String temp = Base64.encodeToString(b, Base64.DEFAULT); bitmap = BitmapFactory.decodeByteArray(b,0,b.length); return temp;
  25. سلام دوستان عزیز من با این مشکل روبرو شدم لطفا راهنمایی کنید