Farzad Sarseifi

اندروید استودیو 3 با بهبودهای فراوان و پشتیبانی از Kotlin معرفی شد

1 ارسال در این موضوع قرار دارد

 اندروید استودیو نام محیط یکپارچه‌ی توسعه (IDE) اختصاصی گوگل است که از آن برای ساخت برنامه‌های اندروید استفاده می‌شود. گوگل آخرین نسخه از اندروید استودیو با نام  Android Studio 2.3 را در ماه مارس (۲ ماه پیش) سال جاری میلادی عرضه کرده بود. با توجه به جهش شماره‌ی نسخه‌ی جدید به ۳، می‌توان انتظار تغییرات بنیادین در ابزار برنامه‌نویسی گوگل داشت. (شماره‌ی نسخه‌های بتای بیلد جدید اندروید استودیو در ابتدا ۲.۴ بود؛ اما گوگل با توجه به گستردگی تغییرات، تصمیم به افزایش شماره‌ی نسخه گرفت.)

 

studio-hero.jpg.ef17de20790d05934549c574fb0983a2.jpg

 

تغییرات و ویژگی‌های جدید نسخه‌ی جدید اندروید استودیو از این قرار است:

  • زبان برنامه‌نویسی Kotlin: می‌توانید به صورت هم‌زمان از کدهای Kotlin در کنار کدهای قدیمی اپلیکیشن اندروید خود استفاده کنید. با استفاده از ابزار تبدیل به کار گرفته‌شده در نسخه‌ی جدید (از مسیر Code → Convert Java File to Kotlin File) می‌توان از کدهای Kotlin در پروژه‌های قدیمی استفاده کرد؛ یا از طریق New Project Wizard می‌توان پروژه‌ای کاملا جدید بر مبنای Kotlin آغاز کرد.
     
  • ویژگی‌های زبان Java 8: برای به‌روزرسانی اپلیکیشن‌های خود به‌منظور پشتیبانی از ابزارهای زبان جدید جاوا 8، کافی است به سادگی سطح سازگاری سورس و تارگت خود را در پنجره‌ی Project Structure به 1.8 افزایش بدهید.
     
  • Layout Editor: قسمت ComponentTree با قابلیت Drag-and-Drop بهبود یافته و پنل ارور جدید به‌روزرسانی شده است. علاوه بر به‌روزرسانی ConstraintLayout، قابلیت اضافه کردن جداسازها (Barriers) و گروه‌بندی نیز به Layout Editor اضافه شده است.
     
  •  Adaptive Icon Wizard: یکی از قابلیت‌های جدید اندروید O، پشتیبانی از آیکون‌های انطباق‌پذیر (Adaptive) در لانچر است. این قابلیت باعث می‌شود آیکون یک اپلیکیشن هنگام نمایش در دستگاه‌های مختلف اندرویدی ظاهر متفاوتی به خود بگیرد. از طریق Wizard اختصاص داده شده به این قابلیت در نسخه‌ی جدید اندروید استودیو می‌توانید آیکون‌های جدید و قدیمی را به پروژه‌ی خود اضافه کنید و نحوه‌ی نمایش آن‌ها در لانچرهای مختلف را از طریق ابزار Preview مشاهده کنید. برای استفاده از این قابلیت در پروژه‌ی خود روی فولدر /res راست کلیک کنید و سپس به مسیر  New → Image Asset → Launcher Icons → Adaptive and Legacy بروید.
     
  • فونت‌های XML و فونت‌های قابل دانلود: با قابلیت جدید XML fonts preview و ابزار جدید انتخاب فونت، اضافه کردن فونت‌های اختصاصی به اپلیکیشن‌های اندروید O بسیار آسان شده است. در آپدیت جدید همچنین می‌توانید به جای گنجاندن فونت‌ها در فایل APK، آن‌ها را به صورت منابع دانلودی درون اپلیکیشن خود قرار دهید. (کاربران برای استفاده از این ویژگی به Google Play Services ورژن 11.2.63 یا بالاتر احتیاج خواهند داشت.)
     
  • پشتیبانی از Android Things: در اندروید استودیو ۳ می‌توانید با استفاده از مجموعه‌ای از قالب‌های پیش‌فرض از طریق ویزاردِ New Project یا New Module به توسعه برای پلتفرم Android Things بپردازید.
     
  • به‌روزرسانی پلتفرم IntelliJ: اIntelliJ 2017.1 با ویژگی‌های جدید از جمله پشتیبانی از بازسازی کدهای Java 8، برجسته‌سازی معنایی کدها، بریک‌پوینت‌های قابل درگ کردن، کنترل‌ورژن بهبودیافته و بسیاری قابلیت‌های جدید دیگر به‌روزرسانی شده است.
     
  • پشتیبانی از Instant App: با استفاده از ماژول‌تایپ‌های جدید instant app و قابلیت جدید App Links Assistant می‌توانید از Instant App-ها در پروژه‌های خود استفاده کنید. برای این کار می‌توانید از طریق ویزاردِ New Module یا راست-کلیک روی کلاس مربوطه، به مسیر Refactor → Modularize بروید.
     
  • افزایش سرعت بیلد: با استفاده از ماژول‌های جدید، سرعت اجرای پروژه‌ها بسیار افزایش یافته است. این بهبود به لطف استفاده از پلاگین جدید Android Gradle میسر شده است؛ بنابراین اگر برنامه‌ی شما به API-های پلاگین قدیمی وابسته است، باید قبل از مهاجرت به پلاگین جدید سازگاری برنامه‌ی خود با API-های جدید را تست کنید. برای این کار نسخه‌ی پلاگین درون فایل build.gradle باید به‌روزرسانی شود.
     
  • ریپازیتوری Google Maven: وابستگی‌های Android Support Library قرار است از این پس خارج از Android SDK Manager و از طریق یک ریپازیتوری جدید با نام Maven در اختیار قرار بگیرند. ساخت، ادغام و مدیریت بیلدهای پیوسته با استفاده از Maven Repository بسیار آسان‌تر از گذشته خواهد بود. (برای استفاده از این منابع، آدرس https://maven.google.com را به فایل build.gradle اپ خود اضافه کنید.)
     
  • ایمیج‌های سیستمی گوگل‌پلی: ایمیج‌های سیستمی شبیه‌ساز اندروید O از این به بعد شامل Google Play Store نیز می‌شوند. از این پس می‌توانید اپلیکیشن‌های خود را به صورت end-to-end با گوگل‌پلی تست کنید و Google Play services را درست مانند دستگاه‌های فیزیکی، در دستگاه اندروید مجازی (AVD) خود نیز به‌روزرسانی کنید.
     
  • پشتیبانی از OpenGL ES 3.0 در Android Emulator: علاوه بر بهبودهای قابل توجه در عملکرد گرافیکی OpenGL ES 2.0 در شبیه‌سازهای قدیمی، پشتیبانی از OpenGL ES 3.0 به Android Emulator اضافه شده است. برای استفاده از این ویژگی، کارت گرافیک دستگاهی که اندروید استودیو ۳ روی آن نصب است باید از OpenGL 3.2 پشتیبانی کند. این قابلیت فعلا تنها برای ویندوز و لینوکس عرضه شده است و هنوز برای MacOS در دسترس نیست.
     
  • App Bug Reporter: برای آسان‌تر شدن فرآیند به دست آوردن گزارش از باگ‌های اپلیکیشن، App Bug Reporter به Android Emulator اضافه شده است. همچنین لینکی برای به‌اشتراک‌گذاری باگ‌های خودِ شبیه‌ساز با تیم اندروید استودیو درون نرم‌افزار در نظر گرفته شده است. (برای این کار به مسیر Emulator Tool Bar → Extended Controls → Help → Emulator Help → File a Bug بروید.)
     
  • پشتیبانی از پراکسی در اندروید: یک رابط کاربری برای مدیریت تنظیمات پراکسی مورد استفاده توسط امولاتور، به نسخه‌ی جدید اضافه شده است. Android Emulator به صورت پیش‌فرض از تنظیمات پراکسی اندروید استودیو استفاده می‌کند، اما از این پس می‌توانید این تنظیمات را از مسیر Extended Controls → Settings → Proxy تغییر بدهید.
     
  • کنترل‌های Android Wear در امولاتور اندروید: کنترل‌های چرخشی اندروید ور ۲.۰ به ایمیج سیستمی امولاتور اضافه شده است. از این پس می‌توانید اپلیکیشن‌های اندورید ور خود را که شامل کنترل‌های چرخشی (برای اسکرول کردن) هستند را به‌راحتی در امولاتور اندروید تست کنید. هنگام انتخاب دستگاه اندروید ور در امولاتور، یک پنل برای شبیه‌سازی ورود کنترل‌های چرخشی در قسمت Extended controls به نمایش درمی‌آید.
     
  • APK Debugging: در صورت داشتن نسخه‌ی قابل دیباگ یک APK، می‌توان به‌راحتی از طریق قابلیت جدید APK Debugging فایل خود را مانیتور، آنالیز و دیباگ کنید. اگر سورس فایل پروژه را نیز در اختیار دارید، می‌توانید با لینک کردن آن به فایل APK، سرعت و دقت فرآیند دیباگ را افزایش دهید. این قابلیت از مسیر File → Profile و سپس انتخاب گزینه‌ی debug APK در دسترس خواهد بود.
     
  • Layout Inspector: قابلیت گروه‌بندی ویژگی‌ها (Properties) در دسته‌های متداول و اضافه شدن امکان جستجو در View Tree و پنل Properties، از جمله قابلیت‌های جدید Layout Inspector هستند. برای دسترسی به این ویژگی‌ها به مسیر Tools → Android → Layout Inspector بروید.
     
  • Device File Explorer: دیوایس فایل اکسپلورر که در واقع نسخه‌ی پورت‌شده‌ی DDMS است، به شما این امکان را خواهد داد تا ساختار فایل‌ها و دایرکتوری دستگاه اندرویدی خود را در امولاتور مشاهده کنید. با استفاده از Device File Explorer می‌توان همزمان با تست اپلیکیشن، فایل‌های app data را در اندروید استودیو مشاهده و دستکاری کرد.
     
  • Android Profiler: ابزارهای مانیتورینگ اندروید استودیو که پیش از این با نام Android Monitor در دسترس بودند، به‌طور کلی از نو نوشته شده و تحت عنوان Android Profiler جایگزین شده‌اند. هنگامی که یک اپلیکیشن را در دستگاه اندرویدی یا امولاتور اجرا می‌کنید، می‌توانید با استفاده از اندروید پروفایلر داده‌های مربوط به مصرف پردازنده، مموری و شبکه را به صورت real-time مانیتور کنید. هر کدام از عملکردهای اپلیکیشن در یک تایم‌لاین جدا به قسمت مربوطه در UI لینک شده است و با کلیک روی آن می‌توانید به جزئیات بیشتری از عملکرد اپلیکیشن خود در آن بخش دسترسی پیدا کنید.
     
  • بهبودهای APK Analyzer: در نسخه‌ی جدید اندروید استودیو می‌توان با آنالیز فایل‌های زیپ Instant App و AAR-ها، سایز فایل APK نهایی را کاهش داد. APK Analyzer جدید امکان مشاهده‌ی بایت‌کدهای dex کلاس‌ها و متدها را نیز فراهم خواهد کرد.

نسخه‌ی جدید اندروید استودیو هنوز در مرحله‌ی آزمایشی قرار دارد؛ اما خبر خوب اینکه می‌توانید همین حالا اندروید استودیو 3 را در کنار نسخه‌ی استیبل نصب، و همزمان مورد استفاده قرار دهید. ساخت اپلیکیشن‌های بهینه شده برای اندروید O، اینستنت اپ‌ها و برنامه‌نویسی به زبان Kotlin، همگی مستلزم استفاده از Android Studio 3 است.

نسخه‌ی جدید ابزار توسعه‌ی گوگل را می‌توانید به صورت مستقیم از آدرس developer.android.com/studio برای ویندوز، لینوکس و مک دریافت کنید.

به اشتراک گذاری این پست


لینک به ارسال
به اشتراک گذاری در سایت های دیگر

برای ارسال نظر یک حساب کاربری ایجاد کنید یا وارد حساب خود شوید

برای اینکه بتوانید نظر ارسال کنید نیاز دارید که کاربر سایت شوید

ایجاد یک حساب کاربری

برای حساب کاربری جدید در انجمن ما ثبت نام کنید. عضویت خیلی ساده است !


ثبت نام یک حساب کاربری جدید

ورود به حساب کاربری

دارای حساب کاربری هستید؟ از اینجا وارد شوید


ورود به حساب کاربری

  • مطالب مشابه

    • توسط Farzad Sarseifi
      دانلود کتاب Android Development with Kotlin

      امروزه روند توسعه نرم افزار اندروید بسیار گسترده شده است. در طول چند سال اخیر، ما شاهد چگونگی پیشرفت ابزارهای مختلفی هستیم تا زندگی ما را ساده‌تر کند. با این حال، یکی از عناصر اصلی فرآیند توسعه نرم افزار اندروید یعنی جاوا در طول این مدت تغییر زیادی نکرده است. پلتفرم اندروید خود را با نسخه‌های جدیدتر جاوا سازگار می‌کند، ولی برای استفاده از آن ها، ما باید مدت زمان بسیار زیادی را صبر کنیم تا دستگاه‌های جدید اندرویدی به فروش مناسب بازار دست یابند. همچنین، توسعه برنامه‌ها با جاوا چالش‌های خود را به همراه دارد، چرا که جاوا زبانی قدیمی با بسیاری از مشکلات طراحی است که به واسطه محدودیت‌های سازگاری با نسخه‌های قدیمی، نمی‌توانند به سادگی حل شوند.
      از سویی دیگر Kotlin، زبانی جدید ولی پایدار است که بر روی همه‌ی دستگاه‌های اندرویدی اجرا می‌شود و بسیاری از مشکلاتی که جاوا قادر به حل آن نبود را حل می‌کند. Kotlin زبان فوق العاده ای است که زندگی توسعه دهنده را بسیار راحت‌تر می‌کند و اجازه می‌دهد تا کد امن تر، بیان گر‌تر و خلاصه‌تر ایجاد شود.
      کتاب توسعه اندروید با Kotlin، راهنمایی عملی است که به شما کمک می‌کند تا با استفاده از زبان Kotlin، روند توسعه اندروید را بهبود داده و به آن سرعت بخشید. ما میان برها و پیشرفت‌های زیاد نسبت به جاوا و راه‌های جدیدی حل مسائل رایج را ارائه دادیم. در پایان این کتاب، شما با ویژگی‌ها و ابزار‌های Kotlin آشنا خواهید شد و شما قادر خواهید بود که برنامه ای اندرویدی را با کاملا با Kotlin توسعه دهید.
       
      What You Will Learn
      Run a Kotlin application and understand the integration with Android Studio
      Incorporate Kotlin into new/existing Android Java based project
      Learn about Kotlin type system to deal with null safety and immutability
      Define various types of classes and deal with properties
      Define collections and transform them in functional way
      Define extensions, new behaviours to existing libraries and Android framework classes
      Use generic type variance modifiers to define subtyping relationship between generic types
      Build a sample application
       Table of Contents
      1: BEGINNING YOUR KOTLIN ADVENTURE
      2: LAYING A FOUNDATION
      3: PLAYING WITH FUNCTIONS
      4: CLASSES AND OBJECTS
      5: FUNCTIONS AS FIRST-CLASS CITIZENS
      6: GENERICS ARE YOUR FRIENDS
      7: EXTENSION FUNCTIONS AND PROPERTIES
      8: DELEGATES
      9: MAKING YOUR MARVEL GALLERY APPLICATION
       
      دانلود
      Packt.Android.Development.with.Kotlin.epub
       
    • توسط Omid Zakeri
      یک کتابخانه بسیار زیبا که جابجایی بین تب ها در فرگمنت ها را بصورت حبابی نمایش می دهد
       
       

       
       

       
      دانلود :
      compile 'com.github.florent37:bubbletab:1.0.2'  
      BubbleTab را به صورت زیر به layout.xml خود اضافه کنید
      شما میتوانید دو پارامتر زیر را اضافه کنید
      circleColor circleRatio <com.github.florent37.bubbletab.BubbleTab android:id="@+id/bubbleTab" android:layout_width="match_parent" android:layout_height="wrap_content" android:clipToPadding="false" android:background="@android:color/white" android:elevation="10dp" app:bubbleTab_circleColor="@color/colorAccent" app:bubbleTab_circleRatio="1.25" > <ImageView android:layout_width="match_parent" android:layout_height="match_parent" android:layout_weight="1" android:padding="16dp" android:src="@drawable/bubbletab_ic_hourglass_selector" /> <ImageView android:layout_width="match_parent" android:layout_height="match_parent" android:layout_weight="1" android:padding="16dp" android:src="@drawable/bubbletab_ic_event_selector" /> <ImageView android:layout_width="match_parent" android:layout_height="match_parent" android:layout_weight="1" android:padding="16dp" android:src="@drawable/bubbletab_ic_query_selector" /> <ImageView android:layout_width="match_parent" android:layout_height="match_parent" android:layout_weight="1" android:padding="16dp" android:src="@drawable/bubbletab_ic_search_selector" /> <ImageView android:layout_width="match_parent" android:layout_height="match_parent" android:layout_weight="1" android:padding="16dp" android:src="@drawable/bubbletab_ic_home_selector" /> </com.github.florent37.bubbletab.BubbleTab> <android.support.v4.view.ViewPager android:id="@+id/viewPager" android:layout_width="match_parent" android:layout_height="match_parent"/>  
       
      سپس برای set کردن viewPager از روش زیر استفاده کنید
      bubbleTab.setupWithViewPager(viewPager);  
       
       
      پشتیبانی: BubbleTab
       
      BubbleTab-master.zip
    • توسط jonoob
      سلام
      وقت همگی بخیر
      من یک دیتا بیس دارم حدود 10 هزار ردیف و بیست ستون هست
      میخواهم از طریق چک باکس مشخص کنم در کدام ستون جستجو کند
      لطفا در صورت امکان کدنویسی مربوط اتصال به دیتابیس و سایر مواردی که مورد نیاز هست بفرمایید\
      من یک تازه کارم
      متشکرم
    • توسط ar-poo
      بسم الله الرحمن الرحیم
      سلام
      مدتی است که اندروید استودیو را به همراه SDKنصب کردم وخود سیستم هم می گوید sdk شما آپدیت است ولی شبیه ساز اندروید استودیو بالا نمی اید واین پیغام خطا را می دهد (عکس در فایل پیوست موجود است)
       
      در ضمن این هم یک عکسی از sdk manager
      (عکس در فایل پیوست موجود است)
      رفتم در بایوس کامپیوتر واین گزینه ها را فعال کنم ولی اصلا وجود نداشت

      Intel Virtualization Technology

      Intel VT-x

      Virtualization Extensions

      Vanderpool

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


    • توسط hackn82
      سلام خدمت اساتید گرامی . 

      من یه برنامه نوشتن که برای یادگیری لغاته . وقتی کاربر لغتی رو به بخش علاقه مندی اضافه می کنه لغت نمایش داده نمیشه و باید برنامه رو مجدد اجرا کرد تا لغت انتخاب شده به بخش علاقه مندی اضافه/ حذف بشه . همچنین بعد از هر بار اجرا لیست لغات تکرار میشه ( مثلا بار دوم از هر کدوم 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); } } }  

  • دوره آموزشی اندروید آموزش ویدئویی اندروید آموزش برنامه نویسی اندروید اندروید کاپ دوره آنلاین اندروید کتاب های آموزشی اندروید بسته آموزشی اندروید دوره برنامه نویسی اندروید آموزش Kotlin آموزش برنامه نویسی ios مهارت های فروش
    آموزش برنامه نویسی اندروید
  • فایل