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

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

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

در این بخش روش کار با دیتابیس آماده اندروید رو یاد میگیریم.

برای کار با دیتابیس آماده اندروید، از کتابخونه‌ای به اسم SQLite Asset Helper استفاده می‌کنیم.

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

 

شروع کار

قدم اول اینه که شما دیتابیس خودتون رو درست کرده باشید و فایل اون رو داشته باشید. من برای ساخت دیتابیس آماده و کلا کار با فایل دیتابیس SQLite، از نرم افزار DB Browser for SQLite استفاده می‌کنم. مهم نیست با چه نرم افزاری دیتابیس رو میسازید. اما فایل دیتابیس شما باید این شرایط رو داشته باشه:

اول: یک جدول به اسم android_metadata داشته باشه که این جدول یک ستون به اسم locale داره. داخل این جدول تنها یک سطر وجود داره که مقدار اون en_US هست. برای ساخت این جدول و اضافه کردن این سطر میتونید خیلی راحت کوئری‌های زیر رو در نرم‌افزاری که بالا معرفی کردیم اجرا کنید. برای اجرا باید به بخش Execute SQL در این نرم‌افزار بروید. (یا در نرم‌افزارهای دیگه بخشی که قابلیت اجرای کوئری SQL رو دارن)

CREATE TABLE android_metadata (locale TEXT);
INSERT INTO android_metadata VALUES('en_US');

فقط کافیه کوئری‌ها رو کپی کنید و دکمه اجرا رو بزنید، یا دکمه F5

دوم: دیتابیس شما باید پسوند db داشته باشه. یعنی در نهایت اسم دیتابیس شما مثلا میشه MyDatabase.db

 

قرار دادن دیتابیس در برنامه

بعد از اینکه دیتابیس خودتون رو ساختید و اطلاعات مدنظرتون رو داخل اون ریختید، نوبت به قرار دادن فایل دیتابیس در برنامه میرسه. بالاتر اشاره کردم، کتابخونه‌ای که ما استفاده می‌کنیم فایل دیتابیس رو به شکل زیپ شده قبول میکنه، پس شما باید فایل دیتابیستون رو با فرمت zip فشرده کنید.

توجه: این مراحل و اسم گذاری‌ها به شدت مهم هست و عدم رعایت هر کدوم باعث میشه به خطا بخورید.

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

ساختار پروژه

ساختار فایل‌های پروژه در اندروید استودیو

 

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

فایل jar این کتابخونه رو دانلود کنید و داخل پوشه libs در پروژتون قرار بدید.

دانلود فایل jar کتابخانه SQLite Asset Helper

توی اندروید استودیو روی فایل jar کتابخونه راست کلیک کنید و پایین پنجره‌ای که باز میشه روی Add as Library کلیک کنید.

صبر کنید پروژتون build و کتابخونه به درستی اضافه بشه. بعد از اتمام این فرآیند می‌بینید که توی فایل gradle پروژه در قسمت dependencies خط زیر اضافه شده

compile files('libs/sqliteassethelper-2.0.1.jar')

 

استفاده از دیتابیس آماده اندروید در برنامه

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

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

MyDatabase.java

package your.package.name;

import android.content.Context;
import com.readystatesoftware.sqliteasset.SQLiteAssetHelper;

public class MyDatabase extends SQLiteAssetHelper {

   private static final String DATABASE_NAME = "MyDatabase.db";
    public static final int DATABASE_VERSION = 1;

    public MyDatabase(Context context) {
      super(context, DATABASE_NAME, null, DATABASE_VERSION);
      setForcedUpgrade();
   }
}

حالا می‌تونید کاملا مشابه قبل از دیتابیس استفاده کنید و ادامه کار هیچ تفاوتی نداره.

 

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

 

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

در این مثال دیتابیس رو باز می‌کنیم و از جدول students اطلاعات آیدی، نام، سن و نمره رو میخونیم و داخل یک تکست‌ویو نمایش میدیم.

SQLiteDatabase mydb = new MyDatabase(MainActivity.this).getWritableDatabase();

TextView txt = (TextView) findViewById(R.id.txt);

Cursor c = mydb.rawQuery("select * from students", null);
while (c.moveToNext()){
    int id = c.getInt(0);
    String name = c.getString(1);
    int age = c.getInt(2);
    int mark = c.getInt(3);

    txt.append(id + "- " + name + ", age: " + age + ", mark: " + mark + "\n");
}

c.close();
mydb.close();

نکته: دوباره تاکید میکنم این کتابخونه به شدت به نام گذاری و شرایطی که گفته شد حساس هست و در صورتی که این مراحل اشتباه انجام داده بشه، با خطا مواجه خواهید شد.

امیدوارم این آموزش براتون مفید واقع بشه.

لطفا هر سوالی داشتید از پرسیدنش کوتاهی نکنید.

 

 

حجت ریحانه

من عاشق برنامه‌نویسی، یاد گرفتن و آموزش دادن هستم. انجام کارای جدید توی برنامه‌نویسی رو بیشتر به چشم سرگرمی میبینم تا کار.

62 ديدگاه بر “آموزش استفاده از دیتابیس آماده اندروید

  1. سلام
    برای تبدیل دیتابیس اکسس به اس کیو لایت چی کار باد کرد؟

    1. سلام
      متاسفانه من در این مورد اطلاعات زیادی ندارم.
      اگر بتونید از دیتابیس اکسس خروجی به صورت فایل CSV یا به صورت کوئری‌های sql بگیرید، اون وقت شاید بتونید این خروجی‌ها رو توی نرم افزارهای sqlite استفاده کنید و دیتابیس خودتون رو به این شکل تبدیل کنید.

  2. سلام
    یرای استفاده ار ۲جدول در دیتابیس باید همه کلاسها و helper ها هم ۲ساخته بشه؟

    1. سلام
      خیر کلاس‌های اصلی و Helper تنها نیازه یک بار نوشته بشه.
      اما همون کدهایی که برای انجام عملیات یک جدول در Helper نوشتید، باید برای جدول دوم هم بنویسید.

  3. سلام
    هنگامی که داده ها تغییر می کنند چطور باید TextView را آپدیت کرد ؟

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

  4. سلام میشه از این روش به صورت داینامیک هم استفاده کرده؟
    مثلا یکسری اطلاعات از قبل وارد دیتابیس کنیم و داخل برنامه کپی کنیم و بعد از اون بتونیم از داخل برنامه یکسری اطلاعات جدید رو به دیتابیس اضافه کنیم؟؟
    مثل عملیات درج و حذف و اپدیت و …

    1. سلام
      بله میشه.
      کاملا مشابه قبل میتونید با این دیتابیس کار کنید.
      تنها مرحله اولیه، یعنی ساخت دیتابیس رو ندارید.

  5. با درود داداشی این روش ی که نوشتم بهتره…..بزارش برای بچه ها…….

    یک پایگاه بانام بهنام و جدولی به نام student و یک ستون به نام name

    این در mainactivity

    MyDatabase db = new MyDatabase(this);
    final SQLiteDatabase database = db.getReadableDatabase();
    Cursor cu = database.rawQuery(“SELECT name FROM student”, null);
    while (cu.moveToNext()) {
    try {

    Toast.makeText(getApplicationContext(), cu.getString(0) , Toast.LENGTH_LONG).show();

    }
    catch (Exception e) {

    }

    }
    cu.close();
    database.close();

    و یک کلاس هم همونطوری که در بالا گفتی
    به نام MyDatabase.java بسازه

    import android.content.Context;

    import com.readystatesoftware.sqliteasset.SQLiteAssetHelper;

    public class MyDatabase extends SQLiteAssetHelper {

    private static final String DATABASE_NAME = “behnam.db”;
    private static final int DATABASE_VERSION = 1;

    public MyDatabase(Context context) {
    super(context, DATABASE_NAME, null, DATABASE_VERSION);
    }
    }

    این روتوش کپی کنه

  6. ممنون از اموزشتون ولی من نمی تونم دیتابیس رو تو اندروید باز کنم چرا؟

    1. سلام
      اگر دقیقا مطابق آموزش برید جلو باید بدون اشکال بتونید پیاده سازی کنید.
      لطفا به اسم گذاری ها و پسوندها و شرایطی که گفته شده دقت کنید.

  7. با سلام امیدوارم همیشه موفق و سربلند باشید . فعلا فقط آموزش را خواندم واقعا عالی توضیح داده بودید .

  8. مرسی از اینکه سریع جواب دادین.ولی من خطا دارم

    public MyDatabase(Context context, String storageDirectory)
    این سازنده کلاس mydatabase هست و دوتا پارامتر میگیره.پارامتر دوم که storageDirectory هست رو چرا خالی گذاشتین؟

    1. آها درسته ببخشید.
      من کد رو تصحیح کردم
      پارامتر storageDirectory برای این هست که بتونید آدرس جایی که فایل دیتابیس کپی میشه رو مشخص کنید.
      این پارامتر اجباری نیست و میتونید کلا از توی تعریف تابع (داخل کلاس myDatabase) اون رو پاک کنیدش و هم از داخل تابع super
      تشکر بابت اطلاع دادن این مشکل

  9. سلام!
    لطفا آموزش رو کامل بذارید یا سورسش رو بذارید من نتونستم پروژه رو جمعش کنم اصن نگفته بودید کد آخر رو تو چه اکتیویتی به کار ببریم یا در مورد معرفی کلاسهای جدید تو اندروید مانیفست من چون با اکلیپس کار میکنم و تازه کارم کلی خطا گرفت واسم گیج شدم مثلا برای cursor یا شی txt حتی برای ; هم خطا گرفت بی زحمت سورس قرار بدید یا یکم کاملترش کنین تا مبتدی ها هم متوجه بشن تنها آموزش توی وب در این موضوع فقط سایت شماست.

    1. سلام
      برای اینکه بتونید با این آموزش کار کنین ابتدا نیاز دارید با مسائل دیتابیس آشنا باشید.
      اول آموزش های مقدماتی دیتابیس رو توی سایت بخونید.

  10. من بازم خطا دارم.میشه کمکم کنید.خیلی برام مهمه
    دقیقا طبق اموزش پیش میرم.۱۰۰ بار چکش کردم.خطا داره
    اینو میده
    Unable to write /MyDatabase.db to data directory

  11. سلام. میشه تو این بخش یک مثال از آموزش استفاده از دیتابیس آماده رو جهت نشون دادن اطلاعات مابین دوتا تاریخ میلادی معین و نمایش اون در ListView رو هم آموزش بدید؟ من واقعا نیاز دارم بهش. ممنون میشم. خدا خیرت بده

  12. سلام به من این خطا رو میده
    Process: com.javid0917.bihamtamadule, PID: 3476
    java.lang.RuntimeException: Unable to start activity ComponentInfo{com.javid0917.bihamtamadule/com.javid0917.bihamtamadule.Main2Activity}: com.readystatesoftware.sqliteasset.SQLiteAssetHelper$SQLiteAssetException: Archive is missing a SQLite database file

    لطفل اگه میدونین چشه پاسخ رو برام ایمیل کنین

    1. Process: com.javid0917.bihamtamadule, PID: 4829
      java.lang.RuntimeException: Unable to start activity ComponentInfo{com.javid0917.bihamtamadule/com.javid0917.bihamtamadule.Main2Activity}: com.readystatesoftware.sqliteasset.SQLiteAssetHelper$SQLiteAssetException: Unable to write /MyDatabase.db to data directory

      این خطا رو میده

  13. سلام من یه دیتا بیس دارم ک میخام بعضی اطلاعات سطر هارو تو برنامه داخل تکست ویو نشون بدم حالا باید چ کدی رو استفاده کنم که فقط همون قسمتی ک میخامو نشون بده
    سطر حالهی دیتا بیس هم از نوع text هستن

    لطفا کدا رو بفرستید واقعا نیاز دارم

  14. سلام. اگه با این برنامه روی دیتابیسی که ساختیم رمز بگذاریم، چطوری توی برنامه ازش استفاده کنیم؟ منظورم اینه که کجا باید رمز رو بهش بدیم در برنامه؟

  15. سلام من تمام مراحلی که شما فرمودید دراکلیپس انجام دادم در ظاهر هیچ مشکلی نداره ولی هنگام اجرا خطای dalvikvm میده:
    Could not find class ‘com.sam.exdb.MyDatabase’, referenced from method com.sam.exdb.Main.onCreate
    سرچ کردم با توجه به این لینک
    https://stackoverflow.com/questions/36816684/android-studio-e-dalvikvm-could-not-find-class-referenced-from-method
    گفتم شاید ورژن پایین تر SQLiteAssetHelper رو باید اضافه کنم ولی نتونستم چیزی پیدا کنم میشه کمکم کنید؟ توی این مرحله ی استفاده از دیتابیس آماده حسابی گیر کردم آموزشی بهتر از مال شما هم توی نت ندیدم. اگر کتاب یا هر مرجعی در این زمینه هست لطفا معرفی کنید ممنون میشم

    1. سلام
      به احتمال زیاد کتابخونه به درستی اضافه نشده به پروژه
      فایل jar رو مطمئن بشید به درستی قرار دادید و پروژه رو یک بار rebuild کنید.
      در نهایت بهتون توصیه میکنم از اندروید استودیو استفاده کنید، اکلیپس واقعا مشکلات زیاد و بی دلیلی داره.

  16. سلام . مشکل من با اندروید استودیو حل شد البته دیتابیس رو هم باید مستقیم از فرمت sqlite زیپ میکردم یعنی پسوند db جزء نام دیتابیس باید باشه . ممنون

  17. اموزش خیلی خوب و مفیدی بود. آیا امکان این وجود داره که از دیتابیس سایت در اندروید استفاده کرد . یعنی وصل باشند . داده ها در دیتابیس سایت ذخیره بشند ؟

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

  19. با سلام
    این پروژه تستی که گذاشتید اصلا دیتابیس رو کپی نمیکنه چرا
    من یه پروژه دارم خیلی درگیر این دیتابیس شدم و نیاز شدید دارم
    اگر که میشه یه پل ارتباطی راحت مثل تلگرام به بزارید تا من مزاحمتون بشم
    تشکر فراوان ♥♥♥♥

  20. سلام
    ببخشید یه سوال داشتم
    من میخوام یه برنامه بنویسم که دیتابیسش از طریق یه دسکتاپ اپلیکیشن تغییر میکنه و در برنامه موبایل استفاده میشه ، برای ایجاد این دیتابیس باید از همین روش استفاده کنم؟؟

  21. سلام و خسته نباشید خدمت دوستان عزیز
    بنده کتابخونه SQLiteAssetsHelper رو دان کردم ولی چون تو مسیر پوشه app پوشه Libs نبود، کتابخونه رو از سایت github گرفتم و تو قسمت Buildgradle جای کتابخونه ها کپی کردم و گذاشتم تا سینک بشه…
    بعد ازین کار کدهام رو نوشتم ولی برنامه کرش میکرد. و میکفت که نمیتونه دیتابیس رو باز کنه… یعنی دیتابیس رو نشناخته بود…
    کد:
    public class MyDatabase extends SQLiteAssetHelper {

    public static final String DB_NAME = “Testdb”;
    public static final int DB_VERSION = 1;

    Context context;

    public MyDatabase(Context context) {
    super(context, DB_NAME, null, DB_VERSION);
    this.context = context;
    }

    public Cursor getInfo() {
    String QUERY = “SELECT * FROM fieldSelect”;
    SQLiteDatabase sqLiteDatabase = this.getReadableDatabase();
    return sqLiteDatabase.rawQuery(QUERY, null);
    }
    }
    به این کد گیره میده:
    SQLiteDatabase sqLiteDatabase = this.getReadableDatabase();

    و خطایی رو با عنوان زیر Log میکنه:
    Caused by: android.database.sqlite.SQLiteCantOpenDatabaseException: unknown error (code 14): Could not open database

    اگه امکانش هست راهنماییم کنید
    ممنون

  22. سلام
    تشکر بابات آموزش خوبتون
    آیا امکاانش هست داخل پروژه هم از دیتا بیس اکسترنال استفاده کرد هم لوکال یک دیتابیس بسازیم و استفاده کنیم یا مجبوریم هرچه جدول داریم در همون دیتا بیسی که می سازیم بیاریم!!

  23. سلام باتشمر از اموزش خوبتون
    کد زیر چرا زیر فیلدهایی که intهست خط قرمز میکشه؟؟
    public class MyDatabaseAction{
    private SQLiteDatabase sqLiteDatabase;
    public MyDatabaseAction(Context context){
    sqLiteDatabase=new MyDatabase(context).getWritableDatabase();
    }
    public void insertAccountBank(int accountId,String accountNumber,String accountIBAN,String accountCardNUmber,int accountInitialBalance,int accountBankId,String accountDescription){
    ContentValues values=new ContentValues();
    values.put(MyDatabase.ACCOUNTID,accountId);
    values.put(MyDatabase.ACCOUNTCARDNUMBER,accountNumber);
    values.put(MyDatabase.ACCOUNTIBAN,accountIBAN);
    values.put(MyDatabase.ACCOUNTCARDNUMBER,accountCardNUmber);
    values.put(MyDatabase.ACCOUNTINITIALBALANCE,accountInitialBalance);
    values.put(MyDatabase.ACCOUNTBANKID,accountBankId);
    values.put(MyDatabase.ACCOUNTDESCRIPTION,accountDescription);
    sqLiteDatabase.insert(MyDatabase.accountbank,null,values);
    sqLiteDatabase.close();
    }
    }

  24. با سلام من هرچی تغییرات تو دیتابیس میدم حتی برنامه رو پاکش میکنم دوباره اجراش میکنم اصلا تغییرات اعمال نمیشه
    از کدوم قسمت میتونه باشه؟

  25. سلام.خیلی ممنون از آموزش کاملتون تنها سایتی بودین که آموزش مفیدی داشتین.تشکر
    یه سوال دارم
    این قسمت
    data[i].date = allrows.getint(allrows.getColumnIndex(MyDatabase.date));
    این قسمت برای وارد کردن date(تاریخ)چیکار باید بکنم؟
    new DatabaseHelper(hazine.this).insertTocost(1086, 2000,””,””,’1397-06-13′,””);
    اینطوری هم وارد میکنم ارور میده
    از Int نمیشه استفاده کرد و حالتی نیست ک بتونم تاریخ رو وارد کنم.گیر کردم اگه ممکنه لطف کنید راهنمایی کنید ممنون میشم.

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

  27. خیلی ممنون بابت این آموزش خوب عالی و ساده ای که در اختیار کاربران قرار دادین…………………
    خیلی متشکرم……….

  28. ممنون از راهنماییتون اما من با ارور زمان اجرا مواجه میشم و ناگهان از برنامه خارج میشه
    نام ها رو هم چندین بار چک کردم، به نظر مشکلی نبود

    1. سلام
      برای اینکه بفهمیم خطا چیه باید توی قسمت logcat توی اندروید استودیو، متن خطا رو ببینیم.
      خطا میتونه از هر چیزی باشه. شاید حتی مربوط به دیتابیس نباشه و ایراد دیگه‌ای توی کد باشه.

  29. با سلام
    من حدودا چند روزی هستش ک دارم سینتکس شما رو مطالعه میکنم خیلی شئی گرایی و منحصر ب فرده و از توابع و شگرد های حرفه ای استفاده شده و خیلی مسرت بخشه ادم میخونتش ولی ی مشکلی هستش من با خیلی از بخش هاش مشکل دارم خواستم بدونم نمیشه ویدیو اموزشی بزارید و این برنامه رو بنویسید ک خط ب خط متوجه شد
    ممنونم

    1. سلام و وقت بخیر
      متاسفانه در حال حاضر فرصت ضبط و ساخت آموزش ویدئویی رو ندارم و این آموزش‌ها هم چند سال پیش تدوین و ساخته شده.
      با تمرین بیشتر میتونید کدها رو متوجه بشید. اولش سخت به نظر میاد.

  30. ممنون از اینکه توضیح دادین ولی باور کنید واسه کسی مثل من یکم سنگین و زمان بره با یه توضیح کوچیک میشه یه جهش بزرگ تو سبک کد نویسی و سواد برنامه نویسی انجام داد ، باز اگر سورسی یا اگر خودتون انجام دادین ممنون میشم منو با خبر کنید ایمیل هم در اختیارتون هست 🙂

    1. خواهش میکنم. بله کاملا درست میفرمایین. من تقریبا ۲ سال هست که تمرکزم رو از اندروید برداشتم و روی بازی‌سازی متمرکز شدم، به همین خاطر در حال حاضر مثل قبل توی این فضا نیستم. امیدوارم موفق باشید.

  31. با سلام مجدد یک مشکلی داشتم میخواستم بدونم چطوری میشه ی چیزی درست کرد که عکس و متن و همینطور لینک اینترنتی رو تو برنامه توی ی صفحه گذاشت ؟
    من دارم یک کتاب مینویسم و تو بعضی از اموزش ها عکس و فیلم و متن و همینطور لینک هستش میخوام اینارو مثل حالتی که تو وورد هستش تو برنامه پیاده کنم ک خوانندم راحت متوجه بشه و همینطور من بتونم اینو پیاده سازی کنم
    متوجه شدین ???
    ممنون میشم کمکم کنید

    1. سلام
      برای این کار تنها در صورتی میتونید از روش ساده استفاده کنید که تمام آموزش‌هاتون یک شکل باشن. یعنی به عنوان مثال همشون فقط یک عکس داشته باشن، و جای عکس مشخص و ثابت باشه. یا مثلا همشون یک فیلم داشته باشن.
      مهم تعداد و قاعده مشخص هست. اینطوری نباشه که یک آموزشتون ۱۰ تا عکس داشته باشه اون یکی دیگه نداشته باشه یا مثلا ۵ تا. یا ترتیب عکس‌هاتون قاعده مشخصی نداشته باشه و به صورت نامنظم بین متن بیاد.
      در این صورت نمیتونید خیلی راحت با جدول و دیتابیس این کار رو بکنید.
      برای حالت‌های نامنظم میشه از فایل‌های html استفاده کنید و اون رو نمایش بدید توی برنامه.
      یا اینکه ساختار هر آموزشتون رو به شکل یک سناریو در بیارید و بعد داخل کدتون اون سناریو رو اجرا کنید.
      مثلا سناریو یک آموزش شما میشه: عکس ۱، متن ۱، عکس ۲، متن ۲، فیلم، لینک، متن ۳
      حالا این رو توی کد میاین پردازش میکنین و طبق اون نمایش میدین. کار سخت و زمان‌بری میشه در این حالت و شاید رسیدن به نتیجه ایده آل زحمت زیادی براتون داشته باشه.
      همون فایل html آماده و نمایش اون ساده‌ترین راه هست.
      البته هر روش مزایا و معایب خودش رو داره.

  32. سلام
    ممنونم از نقطه نظرتون منم فکرم همین بود ، احتمالا از وب ویو و با کد های html استفاده میکنم
    خدا بزرگه یه حرکتی میکنم ، ممنونم از شما.

  33. سلام وقت بخیر یک سوال داشتم
    میخواستم اطلاعات رو داخل db بریزم و بتونم از تو برنامه بهش دسترسی داشته باشم
    خب ولی اطلاعات من پوشه بندی شدست و گاهی بعضی مطالب تا ۴ تا مرحله باید انتخاب بشن تا به اصل مطلب برسن

    ببینید راحت تر میگم من دارم کتاب الکترونیک مینویسم ، لیست عناوین وقتی کلیک شد ممکنه برای مطالب عمومی همه مقاله ها باشند ولی برای تخصصی باید طرف اول تخصصی رو انتخاب کنه بعد فرضا frp رو انتخاب کنه بعد برند گوشی ک در اخر به مطالب میرسه چطور باید اینکارو بکنم
    سوالم رو امیدوارم توجه بشید…

    1. سلام
      برای کتاب الکترونیکی که موضوع بندی یا فصل بندی داره باید ساختار جدولتون به شکل پدر و فرزندی باشه.
      هر عنوان و نوشته‌ای یک آیدی منحصر بفرد داره و یک شماره پدر.
      موضوعات اصلی پدرشون صفر هست. با این کار شما ابتدا لیست تمام موضوعات با پدر صفر و میگیرید.
      بعد روی یک موضوع که کلیک میشه، با توجه به آیدی اون موضوع، تمام موضوعاتی رو میگیرید که پدرشون برابر این آیدی باشه.
      در نهایت این اتفاق انقدر میافته تا یک موضوع در نهایت هیچ فرزندی نداشته باشه، یا اصطلاحا هیچ موضوعی نباشه که پدرش برابر این باشه.
      در این صورت مطلب اون موضوع رو نمایش میدید که اون هم باید پدرش برابر با آیدی اون موضوع باشه.
      یکم باید روش قشنگ فکر کنید و تحلیل کنید. حتما روی کاغذ اوردن و نوشتن بهتون کمک زیادی میکنه.
      اما حواستون هم باشه زیاد جدولتون رو شلوغ نکنید، چون بعدا توی کدنویسی ممکنه کارتون رو خیلی سخت‌تر کنه.

  34. ممنون ک اینقدر سریع جواب دادین

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

    ممنون قربان

    1. خواهش میکنم
      متاسفانه در این زمینه نمونه کد ندارم. در واقع کد خاص و جدیدی غیر از چیزی که اینجا آموزش داده شده هم نداره.
      نکته مهم درک ساختار جدول و نحوه گرفتن اطلاعات هست. از نظر فنی و کدنویسی تفاوت خاصی نداره.

      بنده چند سالی هست که برنامه‌نویسی اندروید رو کنار گذاشتم و توی این فضا نیستم که فروم‌های فعال رو بشناسم و بتونم معرفی کنم.
      توی اینترنت جستجو کنید حتما پیدا میشه.
      سایت برنامه‌نویس هست اما نمیدونم بخش اندرویدش هنوز فعال هستن یا نه.

      موفق باشید

  35. با عرض سلام و خسته نباشید دیگر

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

    ببینید من میخوام از دیتابیس متنی رو فراخونی کنم و به صورت text به وب ویو بدم منتهی این متن من به ساختار کد html نوشته شده هستش ، یعنی تگ های head body و غیره نوشته شدست دقت کنید ک صفحه از پیش ساخته شده نیستش ، میخوام ک عکس و لینک رو به این صورت در متنم جا بدم و توسط وب ویو نمایش بدم عکس رو میخوام از پوشه Asset فراخونی کنم منتهی کدش از داخل متن توی دیتابیسی ک من ساختم میاد
    میخوام بدونم چطوری میتونم عکس رو از داخل Asset بخونم و چطوری لینک رو با تگ <a بنویسم ک با وب ویو نمایش بدم

    سوالم الان واضح تر شد ؟

    1. سلام و وقت بخیر

      سوالتون رو متوجه شدم اما متاسفانه این مورد رو قبلا کار نکردم که بتونم راهنمایی‌تون کنم.
      باید توی گوگل سرچ کنید واسش.

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

پاسخی بگذارید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *