PDA

View Full Version : مشکل با گوشی های سامسونگ



reza_azizi2010
سه شنبه 03 دی 1392, 18:11 عصر
با سلام
من یه برنامه نوشتم که با گوشی های سامسونگ مشکل داره و اصلا اجرا نمیشه
اما توی گوشی های دیگه اجرا میشه
بنظرتون مشکل از چیه؟

hamedjj
سه شنبه 03 دی 1392, 20:00 عصر
خوبه یه برنامت اینجوری شد
5 تا از برنامه های من تو گوشی و تبلت های مختلف درست بالا اومد
ولی همشون تو galaxy S3 فورس کلوز می داد

فکر کنم چون این شرکت ها اندروید را برای دستگاه های خودشان شخصی می کنند این قبیل مشکلات ظاهر میشه

rubiks.kde
سه شنبه 03 دی 1392, 20:18 عصر
با سلام
من یه برنامه نوشتم که با گوشی های سامسونگ مشکل داره و اصلا اجرا نمیشه
اما توی گوشی های دیگه اجرا میشه
بنظرتون مشکل از چیه؟

سلام به این پست قدیمی من یه سری بزن شاید مشکل برطرف شد.
اینجا (http://barnamenevis.org/showthread.php?420474-%D9%85%D8%B4%DA%A9%D9%84%D8%A7%D8%AA-%D8%A7%D9%86%D8%AA%D8%B4%D8%A7%D8%B1-%D8%A8%D8%B1%D9%86%D8%A7%D9%85%D9%87)

reza_azizi2010
سه شنبه 03 دی 1392, 23:19 عصر
قسمت جالبش اینجاست که قبلا روی گوشی سامسونگ جواب میداد فقط بعد از یه تغییر کوچیک، دیگه اجرا نمیشه
تغییر هم چیز عجیبی نبود، فقط موقع اولین اجرای برنامه، چک میکردم که اگه دیتابیس وجود داشت، حذفش کنه. تا مجبور نشم واسه آپدیت دادن ملت رو مجبور کنم ورژن قبلی رو پاک کنن.
مث اینکه باید پاک کنن!

reza_azizi2010
سه شنبه 03 دی 1392, 23:43 عصر
مشکل از همین چک کردنه بود! حذفش کردم درست شد

rubiks.kde
چهارشنبه 04 دی 1392, 00:28 صبح
مشکل از همین چک کردنه بود! حذفش کردم درست شد

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

reza_azizi2010
چهارشنبه 04 دی 1392, 13:55 عصر
چیکار میکنه این کلاس؟ من میخام یکی الز تیبلهام بعد از بروزرسانی حذف بشه. ممنون میشم یکم توضیح بدین

rubiks.kde
چهارشنبه 04 دی 1392, 14:23 عصر
شما برای کار با دیتابیس توی آندورید میایی یه کلاس از SQLiteOpenHelper میسازی ، درسته؟
توی این کلاس توابعی مثل onCreate و onUpdate وجود داره.زمانی که داری دیتابیس میسازی به دیتابیس ورژن هم میدی.
توی تابع onUpdate چند پارامتر ورودی هست که یکی ورژن قدیم و یکی ورژن جدید.

زمانی که شما از برنامه یک نسخه جدید میدید توی این کلاس ورژن دیتابیس رو هم تغییر میدید مثلا از 1 به 2 و توی تابع OnUpate میایی میگی اگه ورژن قدیم 1 هست و ورژن جدید هم 2 یه کوئری میزنی برای حذف جدول.
حالا این چیکار میکنه :
زمانی که شما برنامه رو نصب کنی اگه کاربر ورژن قبلی رو داشته باشه با اولین اجرا خود آندورید میاد تابع onupdate مربوط به پایگاه داده رو اجرا میکنه.و اگه ورژن قبلی 1 باشه طبق اون کوئری معرفی شده از طرف شده پایگاه داده رو آپدیت میکنه.

reza_azizi2010
چهارشنبه 04 دی 1392, 15:30 عصر
شما برای کار با دیتابیس توی آندورید میایی یه کلاس از SQLiteOpenHelper میسازی ، درسته؟
توی این کلاس توابعی مثل onCreate و onUpdate وجود داره.زمانی که داری دیتابیس میسازی به دیتابیس ورژن هم میدی.
توی تابع onUpdate چند پارامتر ورودی هست که یکی ورژن قدیم و یکی ورژن جدید.

زمانی که شما از برنامه یک نسخه جدید میدید توی این کلاس ورژن دیتابیس رو هم تغییر میدید مثلا از 1 به 2 و توی تابع OnUpate میایی میگی اگه ورژن قدیم 1 هست و ورژن جدید هم 2 یه کوئری میزنی برای حذف جدول.
حالا این چیکار میکنه :
زمانی که شما برنامه رو نصب کنی اگه کاربر ورژن قبلی رو داشته باشه با اولین اجرا خود آندورید میاد تابع onupdate مربوط به پایگاه داده رو اجرا میکنه.و اگه ورژن قبلی 1 باشه طبق اون کوئری معرفی شده از طرف شده پایگاه داده رو آپدیت میکنه.
راستش اینجوری که شما با اطمینان گفتی از کلاس SQLiteOpenHelper استفاده میکنی، زشته که بگم اصلا همچین کلاسی ندارم!

rubiks.kde
چهارشنبه 04 دی 1392, 16:11 عصر
کلاس پایگاه داده تون رو اینجا بزارید ببینیم چطوری استفاده کردید.

reza_azizi2010
چهارشنبه 04 دی 1392, 17:11 عصر
راستش اونجوری که شما فکر میکنید نیست! من تو اکتیویتی اولم دیتابیس رو ایجاد کردم و یک تیبل ساختم ، کلاس ندارم!
یعنی اینجوری :
database = SQLiteDatabase.openOrCreateDatabase(DATABASE_DIR + "/my_db", null);

بعدشم که تیبل رو ساختم :
database.execSQL("CREATE TABLE IF NOT EXISTS my_table ....."

reza_azizi2010
چهارشنبه 04 دی 1392, 18:40 عصر
من میخام طبق راهنمایی شما اصولی کار کنم و از کلاس SQLiteOpenHelper استفاده کنم


public class DBhelper extends SQLiteOpenHelper {

public DBhelper(Context context, String name, CursorFactory factory, int version) {
super(context, name, factory, version);
// TODO Auto-generated constructor stub
}

@Override
public void onCreate(SQLiteDatabase arg0) {
// TODO Auto-generated method stub

}

@Override
public void onUpgrade(SQLiteDatabase arg0, int arg1, int arg2) {
// TODO Auto-generated method stub

}



}


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

rubiks.kde
چهارشنبه 04 دی 1392, 20:27 عصر
اول میاییم یه کلاس مشتق شده از SQLiteOpenHelper میسازیم(کلاس پایه)

public class Database extends SQLiteOpenHelper {

private static final String DB_NAME = "surbiks.db";
private static final int DB_VERSION = 1;

public Database(Context context){
super(context, DB_NAME, null, DB_VERSION);
}

@Override
public void onCreate(SQLiteDatabase db) {

db.execSQL("CREATE TABLE IF NOT EXISTS message (id integer,body text,state integer,tarikh text);");

}

@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {

}
}

توی تابع onCreate موارد اولیه رو وارد میکنیم(جداول و داده هایی که نیاز داریم بسازیم.)

حالا یک کلاس دیگه مینویسیم که از این مشتق بشه :

public class ItemModel extends Database{

public ItemModel(Context context) {
super(context);
}

public void deleteAll() {

SQLiteDatabase db = this.getReadableDatabase();
db.delete("items", null, null);
db.close();
}

public void deleteOne(Entry item){
SQLiteDatabase db = this.getReadableDatabase();
String []args = {item.getTitle(),item.getUrl()};
db.delete("items", "title=? AND link=?", args);
db.close();
}

public ArrayList<Entry> selectAll(){

ArrayList<Entry> entries = new ArrayList<Entry>();

SQLiteDatabase db = this.getReadableDatabase();
String sql = "SELECT * FROM items ORDER BY date DESC";
Cursor cursor = db.rawQuery(sql, null);

if(!cursor.moveToFirst()){
cursor.close();
db.close();
return entries;
}
do{
Entry item = new Entry();
item.setTitle(cursor.getString(1));
item.setDate(cursor.getString(3));
item.setUrl(cursor.getString(2));
item.setDescription(cursor.getString(4));
entries.add(item);
}while(cursor.moveToNext());

cursor.close();
db.close();
return entries;
}
}

توی این کلاس مثل توابع نمونه میاییم توابع مورد نیاز مثل حذف ، ... رو مینویسیم و هر جای برنامه هم لازم باشه یه شی ازش میسازیم و از توابعش استفاده میکنیم.

حالا کاری که شما میکنی توی ورژن جدید برنامت تغییر کلاس اول است به این صورت :

public class Database extends SQLiteOpenHelper {

private static final String DB_NAME = "surbiks.db";
private static final int DB_VERSION = 2;

public Database(Context context){
super(context, DB_NAME, null, DB_VERSION);
}

@Override
public void onCreate(SQLiteDatabase db) {

db.execSQL("CREATE TABLE IF NOT EXISTS items (" +
"id integer primary key autoincrement," +
"title text," +
"link text," +
"date text," +
"desc text"+
");");

db.execSQL("CREATE TABLE IF NOT EXISTS message (id integer,body text,state integer,tarikh text);");

}

@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
if(oldVersion == 1 && newVersion == 2){
db.execSQL("CREATE TABLE IF NOT EXISTS items (" +
"id integer primary key autoincrement," +
"title text," +
"link text," +
"date text," +
"desc text"+
");");
}
}
}

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

اینم یه مثال کامل تر از این موضوع ---- > اینجا (http://sampleprogramz.com/android/sqlitedb.php)

reza_azizi2010
چهارشنبه 04 دی 1392, 20:45 عصر
مرسی
میشه بگین الان کجا و با کدوم دستور دیتابیس ساخته میشه؟
یعنی onCreate کجا فراخانی میشه؟
وقتی یه شی از روش میسازیم؟

reza_azizi2010
چهارشنبه 04 دی 1392, 20:49 عصر
من نمیتونم کل برنامه رو تغییر بدم و همه مدهای دیتابیس رو با این روش تغییر بدم چون حسابی گیج شدم
فقط اگه بشه میخام همون قضیه چک کردن رو انجام بده

rubiks.kde
چهارشنبه 04 دی 1392, 21:36 عصر
مرسی
میشه بگین الان کجا و با کدوم دستور دیتابیس ساخته میشه؟
یعنی onCreate کجا فراخانی میشه؟
وقتی یه شی از روش میسازیم؟

آره وقتی شی ساخته میشه خودش onCreate رو اجرا میکنه

reza_azizi2010
چهارشنبه 04 دی 1392, 23:48 عصر
ورژنها رو از کجا مقدار دهی کنیم؟
مسیر دیتابیس کجاست