hamidreza.kh

مشکل در آپدیت کردن سطر از دیتابیس

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

خسته نباشید دوستان

من میخوام یه مقداری رو بگیرم که داخل تیبل settings از دیتابیسم بصورت key ,value ذخیرش کردم key ش sound هست که از نوع ورکرکتر هست و میخوام اگه مقدارش 1 هست یه عکسی رو نشون بده اگرم مقدارش 0 هست یه عکس دیگه رو(همزمان اگه مقدار 1 بود صدا پخش بشه اگرم 0 بود پخش نشه)

خلاصه مطلب اما به یه اروری خوردم حالا میخواستم ببینم ایراد از کجاست؟!

این کلاس دیتابیس منیجرم

public class DatabaseManager extends SQLiteOpenHelper {

    private Context context;

    private static String DB_PATH = "data/data/com.wordstutorial.hamidrezak.wordstutorials/databases/";
    private static String DB_NAME = "words_db.db";

    public static String DB_TABLE_WORDS ="words";
    public static String BD_TABLE_PLAY="play";
    public static String DB_TABLE_SETTINGS="settings";

    private static int DB_VERSION = 2;

    private SQLiteDatabase dbase;

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

    public void createDatabase(){

        boolean dbExist = checkDatabase();

        if (dbExist) {
            Log.d("TAG", "Database already Exist");
        } else {
            this.getReadableDatabase();
        }

        try {
            copyDataBase();
        } catch (IOException e) {

            throw new Error("Error copying database");
        }

    }

    private  boolean checkDatabase() {
        SQLiteDatabase checkDB = null;
        try {
            String myPath = DB_PATH + DB_NAME;
            checkDB=SQLiteDatabase.openDatabase(myPath , null, SQLiteDatabase.OPEN_READWRITE);

        } catch (SQLiteException e) {

        }

        if (checkDB != null) {
            checkDB.close();
        }
        return checkDB != null ? true : false;
    }

    private void copyDataBase() throws IOException {

        InputStream myInput = context.getAssets().open(DB_NAME);
        String outFileName = DB_PATH + DB_NAME;
        OutputStream myOutput = new FileOutputStream(outFileName);

        byte[] buffer = new byte[1024];
        int length;
        while ((length = myInput.read(buffer)) > 0) {
            myOutput.write(buffer, 0, length);
        }
        myOutput.flush();
        myOutput.close();
        myInput.close();
    }

    public void openDataBase() throws SQLiteException {

        String myPath = DB_PATH + DB_NAME;
        dbase = SQLiteDatabase.openDatabase(myPath, null, SQLiteDatabase.OPEN_READWRITE);
    }


    public Cursor queryData(String query) {
        return dbase.rawQuery(query, null);
    }

    @Override
    public synchronized void close() {
        if (dbase != null)
            dbase.close();
        super.close();
    }

    @Override
    public void onCreate(SQLiteDatabase db) {
       ///DO NOTHING

    }


    @Override
    public void onUpgrade(SQLiteDatabase db, int oldV, int newV) {
    ///DO NOTHING

    }


   public int getSoundState(){

       openDataBase();
        Cursor cursor=queryData( " SELECT * FROM " + DB_TABLE_SETTINGS +  " WHERE key='sound' ");
        cursor.moveToFirst();
        return Integer.parseInt(cursor.getString(2));

    }

    public boolean setSoundState(int state){

        openDataBase();
        ContentValues contentValues=new ContentValues();
        contentValues.put("sound",state);

        long result=dbase.update(DB_TABLE_SETTINGS,contentValues," key = ? " , new String[] {"sound"} );
        if (result < 1){
            return true;
        }else {
            return false;
        }
    }

}

همونطوری که میبینید متد های گتر و ستر رو برای وضعیت صدام مشخص کردم...

اینم کلاسی که میخوام اطلاعاتو ویرایش کنم...

public class WordActivity extends AppCompatActivity {

    private MediaPlayer mediaPlayer;
     DatabaseManager db;
    private SQLiteDatabase sqLiteDatabase;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_word);

        Intent intent = getIntent();

        final int id = intent.getIntExtra("id", 0);
        String word = intent.getStringExtra("word");
        String imageWord = intent.getStringExtra("image");
        String soundWord = intent.getStringExtra("sound");


        int resID = getResources().getIdentifier(imageWord, "mipmap", getPackageName());

        int resImage = this.getResources().getIdentifier(soundWord, "raw", this.getPackageName());

        ImageView imageBox = (ImageView) findViewById(R.id.image_word_activity);

        final ImageView imageSoundState = (ImageView) findViewById(R.id.sound_state);

        if (db.getSoundState()==1){
            Picasso.with(this).load(R.drawable.sound_play).into(imageSoundState);
        }else {
            Picasso.with(this).load(R.drawable.sound_stop).into(imageSoundState);
        }



      imageSoundState.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {

                if (db.getSoundState()==1){

                    if (db.setSoundState(0)){
                        Picasso.with(WordActivity.this).load(R.drawable.sound_stop).into(imageSoundState);

                    }

                }else {
                    if (db.setSoundState(1)){
                        Picasso.with(WordActivity.this).load(R.drawable.sound_play).into(imageSoundState);


                    }

                }

            }
        });

        TextView textBox = (TextView) findViewById(R.id.text_word_activity);

        Picasso.with(this).load(resID).into(imageBox);

        mediaPlayer = MediaPlayer.create(this, resImage);
        mediaPlayer.start();

        textBox.setText(word);

    }

    @Override
    protected void onPause() {
        super.onPause();
        mediaPlayer.release();
    }

 

 

اینم ارور ها 

01-09 17:59:26.831 27683-27683/? I/art: Not late-enabling -Xcheck:jni (already on)
01-09 17:59:26.831 27683-27683/? W/art: Unexpected CPU variant for X86 using defaults: x86
01-09 17:59:26.883 27683-27683/com.wordstutorial.hamidrezak.wordstutorials W/System: ClassLoader referenced unknown path: /data/app/com.wordstutorial.hamidrezak.wordstutorials-1/lib/x86
01-09 17:59:26.902 27683-27683/com.wordstutorial.hamidrezak.wordstutorials W/art: Before Android 4.1, method android.graphics.PorterDuffColorFilter android.support.graphics.drawable.VectorDrawableCompat.updateTintFilter(android.graphics.PorterDuffColorFilter, android.content.res.ColorStateList, android.graphics.PorterDuff$Mode) would have incorrectly overridden the package-private method in android.graphics.drawable.Drawable
01-09 17:59:27.099 27683-27711/com.wordstutorial.hamidrezak.wordstutorials I/OpenGLRenderer: Initialized EGL, version 1.4
01-09 17:59:27.099 27683-27711/com.wordstutorial.hamidrezak.wordstutorials D/OpenGLRenderer: Swap behavior 1
01-09 17:59:27.160 27683-27711/com.wordstutorial.hamidrezak.wordstutorials E/EGL_emulation: tid 27711: eglSurfaceAttrib(1146): error 0x3009 (EGL_BAD_MATCH)
01-09 17:59:27.160 27683-27711/com.wordstutorial.hamidrezak.wordstutorials W/OpenGLRenderer: Failed to set EGL_SWAP_BEHAVIOR on surface 0x9d9648a0, error=EGL_BAD_MATCH
01-09 17:59:28.300 27683-27711/com.wordstutorial.hamidrezak.wordstutorials E/EGL_emulation: tid 27711: eglSurfaceAttrib(1146): error 0x3009 (EGL_BAD_MATCH)
01-09 17:59:28.301 27683-27711/com.wordstutorial.hamidrezak.wordstutorials W/OpenGLRenderer: Failed to set EGL_SWAP_BEHAVIOR on surface 0x9d964a60, error=EGL_BAD_MATCH
01-09 17:59:30.948 27683-27683/com.wordstutorial.hamidrezak.wordstutorials E/SQLiteLog: (14) cannot open file at line 32456 of [bda77dda96]
01-09 17:59:30.948 27683-27683/com.wordstutorial.hamidrezak.wordstutorials E/SQLiteLog: (14) os_unix.c:32456: (2) open(//data/data/com.wordstutorial.hamidrezak.wordstutorials/databases/words_db.db) - 
01-09 17:59:30.949 27683-27683/com.wordstutorial.hamidrezak.wordstutorials E/SQLiteDatabase: Failed to open database 'data/data/com.wordstutorial.hamidrezak.wordstutorials/databases/words_db.db'.
                                                                                             android.database.sqlite.SQLiteCantOpenDatabaseException: unknown error (code 14): Could not open database
                                                                                                 at android.database.sqlite.SQLiteConnection.nativeOpen(Native Method)
                                                                                                 at android.database.sqlite.SQLiteConnection.open(SQLiteConnection.java:209)
                                                                                                 at android.database.sqlite.SQLiteConnection.open(SQLiteConnection.java:193)
                                                                                                 at android.database.sqlite.SQLiteConnectionPool.openConnectionLocked(SQLiteConnectionPool.java:463)
                                                                                                 at android.database.sqlite.SQLiteConnectionPool.open(SQLiteConnectionPool.java:185)
                                                                                                 at android.database.sqlite.SQLiteConnectionPool.open(SQLiteConnectionPool.java:177)
                                                                                                 at android.database.sqlite.SQLiteDatabase.openInner(SQLiteDatabase.java:808)
                                                                                                 at android.database.sqlite.SQLiteDatabase.open(SQLiteDatabase.java:793)
                                                                                                 at android.database.sqlite.SQLiteDatabase.openDatabase(SQLiteDatabase.java:696)
                                                                                                 at android.database.sqlite.SQLiteDatabase.openDatabase(SQLiteDatabase.java:671)
                                                                                                 at com.wordstutorial.hamidrezak.wordstutorials.DatabaseManager.checkDatabase(DatabaseManager.java:63)
                                                                                                 at com.wordstutorial.hamidrezak.wordstutorials.DatabaseManager.createDatabase(DatabaseManager.java:42)
                                                                                                 at com.wordstutorial.hamidrezak.wordstutorials.View.Activity.WordsActivity.loadDatabase(WordsActivity.java:41)
                                                                                                 at com.wordstutorial.hamidrezak.wordstutorials.View.Activity.WordsActivity.onCreate(WordsActivity.java:28)
                                                                                                 at android.app.Activity.performCreate(Activity.java:6662)
                                                                                                 at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1118)
                                                                                                 at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2599)
                                                                                                 at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2707)
                                                                                                 at android.app.ActivityThread.-wrap12(ActivityThread.java)
                                                                                                 at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1460)
                                                                                                 at android.os.Handler.dispatchMessage(Handler.java:102)
                                                                                                 at android.os.Looper.loop(Looper.java:154)
                                                                                                 at android.app.ActivityThread.main(ActivityThread.java:6077)
                                                                                                 at java.lang.reflect.Method.invoke(Native Method)
                                                                                                 at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:865)
                                                                                                 at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:755)
01-09 17:59:31.466 27683-27711/com.wordstutorial.hamidrezak.wordstutorials E/EGL_emulation: tid 27711: eglSurfaceAttrib(1146): error 0x3009 (EGL_BAD_MATCH)
01-09 17:59:31.466 27683-27711/com.wordstutorial.hamidrezak.wordstutorials W/OpenGLRenderer: Failed to set EGL_SWAP_BEHAVIOR on surface 0x9d90cf20, error=EGL_BAD_MATCH
01-09 17:59:32.089 27683-27683/com.wordstutorial.hamidrezak.wordstutorials D/AndroidRuntime: Shutting down VM
01-09 17:59:32.089 27683-27683/com.wordstutorial.hamidrezak.wordstutorials E/AndroidRuntime: FATAL EXCEPTION: main
                                                                                             Process: com.wordstutorial.hamidrezak.wordstutorials, PID: 27683
                                                                                             java.lang.RuntimeException: Unable to start activity ComponentInfo{com.wordstutorial.hamidrezak.wordstutorials/com.wordstutorial.hamidrezak.wordstutorials.View.Activity.WordActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'int com.wordstutorial.hamidrezak.wordstutorials.DatabaseManager.getSoundState()' on a null object reference
                                                                                                 at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2646)
                                                                                                 at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2707)
                                                                                                 at android.app.ActivityThread.-wrap12(ActivityThread.java)
                                                                                                 at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1460)
                                                                                                 at android.os.Handler.dispatchMessage(Handler.java:102)
                                                                                                 at android.os.Looper.loop(Looper.java:154)
                                                                                                 at android.app.ActivityThread.main(ActivityThread.java:6077)
                                                                                                 at java.lang.reflect.Method.invoke(Native Method)
                                                                                                 at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:865)
                                                                                                 at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:755)
                                                                                              Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'int com.wordstutorial.hamidrezak.wordstutorials.DatabaseManager.getSoundState()' on a null object reference
                                                                                                 at com.wordstutorial.hamidrezak.wordstutorials.View.Activity.WordActivity.onCreate(WordActivity.java:43)
                                                                                                 at android.app.Activity.performCreate(Activity.java:6662)
                                                                                                 at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1118)
                                                                                                 at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2599)
                                                                                                 at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2707) 
                                                                                                 at android.app.ActivityThread.-wrap12(ActivityThread.java) 
                                                                                                 at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1460) 
                                                                                                 at android.os.Handler.dispatchMessage(Handler.java:102) 
                                                                                                 at android.os.Looper.loop(Looper.java:154) 
                                                                                                 at android.app.ActivityThread.main(ActivityThread.java:6077) 
                                                                                                 at java.lang.reflect.Method.invoke(Native Method) 
                                                                                                 at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:865) 
                                                                                                 at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:755) 

 

ممنون میشم کمک کنید ببینم مشکل از کجاست؟!

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


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

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

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

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

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


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

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

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


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

  • مطالب مشابه

    • توسط __pouya__
      با سلام
      من چند تا imageview دارم که وقتی روشون کلیک میکنم دستور info اجرا میشه اینم کدش:
      public class MainActivity extends Activity { Integer[] cardsArray{101,102,103,104,105,106,201,202,203,204,205,206}; int cardNumber =1; public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); iv_11 =(ImageView)findViewById(R.id.iv_11); iv_12 =(ImageView)findViewById(R.id.iv_12); iv_13 =(ImageView)findViewById(R.id.iv_13); iv_14 =(ImageView)findViewById(R.id.iv_14); iv_11.setTag("0"); iv_12.setTag("1"); iv_13.setTag("2"); iv_14.setTag("3"); Collections.shuffle(Arrays.asList(cardsArray)); iv_11.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { theCard = Integer.parseInt((String) v.getTag()); info(iv_11, theCard); } }); iv_12.setOnClickListener(new View.OnClickListener() { @Override public void onClick (View v) { theCard = Integer.parseInt((String) v.getTag()); info(iv_12, theCard); }}); iv_13.setOnClickListener(new View.OnClickListener() { @Override public void onClick (View v) { theCard = Integer.parseInt((String) v.getTag()); info(iv_13, theCard); } }); iv_14.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { theCard = Integer.parseInt((String) v.getTag()); info(iv_14, theCard); } }); private void info(ImageView iv, int card) { if (cardNumber == 1) { firstCard = cardsArray[card]; if (firstCard > 200) { firstCard = firstCard - 100; } cardNumber = 2; iv.setEnabled(false); } else if (cardNumber == 2) { secondCard = cardsArray[card]; if (secondCard > 200) { secondCard = secondCard - 100; } cardNumber = 1; Handler handler = new Handler(); handler.postDelayed(new Runnable() { @Override public void run() { calculate(); } }, 1000); } } وقتی متد info اجرا میشه متغییر های firstcard وsecendcard مقدار هایی رو دریافت میکنن.
      و اینم دستور if هستش:
      if (firstCard==secondCard){ } میخواستم بدونم چرا وقتی مقدار firstcard وsecendcard مساوی نیست دستور if اجرا میشه؟؟
      وقتی روی imageview ها با سرعت کلیک میکنم این اتفاق میفته ولی با کلاس log چک کردم firstcard وsecendcard مقدارشون متفاوت بود.
    • توسط مهندس
      سلام دوستان.
      من با متد get در کتابخونه والی یکسری داده رو میگیرم ، url من اینجوریه
      final String url=String.format("http://localhost/test/user.php?name=%1$s&lastname=%2$s&star_date=" +"%3$s&end_date=%4$s",name,lastname,star_date,end_date) ; تو بعضی گوشی ها داده ها درست ب سرور ارسال میشن ولی تو بعضی گوشی ها داده ها اینجوری بصورت ???? هستن.
      البته من در سمت سرور utf8 رو ست کردم و احتمالا باید گیر از سمت جاوا باشه.
      این مشکل در متد get اتفاق میفته و در متد post هیچ مشکلی ندارم و داده ها درست ارسال میشن.
      دوستان مشکلش چیه؟؟؟؟؟؟؟؟
    • توسط مهندس
      سلام دوستان.
      من یک فرم دارم داخل اکتیویتی ک 10 تا اپشن داره که بر اساس اون کاربر میتونه جستجو بزنه.
      مثلا فرم نام و نام خانوادگی و شماره تلفن و تاریخ داره، کاربر میتونه فقط فیلد تاریخو پر کنه یا میتونه نام رو هم پر کنه یا اینکه همشو پر کنه، ب هر حال کوئری جستجو باید بر اساس این فیلدها انجام بگیره، من در سمت اندروید مشکلی ندارم و داده ها میره به سرور، اما مشکلم در بخش php هست، چجوری کوئری بزنم ؟؟؟
      اگه بخام یکی یکی با if چک کنم که اگه فلان فیلد نال بود اینجوری کوئری بزن اگه فلانی خالی بود جور دیگه کوئری بزن ، برای وقتی ک فرم فیلدهای زیادی داره منطقی ب حساب نمیاد.
      ممکنه راهنمایی کنید؟؟؟؟
    • توسط مهندس
      سلام دوستان.
      چجوری میتونم ساعت رو در دیتابیس sqlite ذخیره کنم؟؟
      منظورم اینه ک من یکسری داده دارم میخام وقتی ثبت دیتابیس شد، ساعتی ک کاربر داده رو ثبت میکنه هم در یک فیلد ثبت بشه.
      من یه فیلد با نوع TIME در دیتابیس گذاشتم، اما نمیدونم چجوری و با چه توابعی ساعت رو ذخیره کنم؟؟
      در ضمن راهی هست ک ساعت واقعی ثبت بشه؟؟
      یعنی اینکه اگه یه وقت کاربر ساعت گوشیشو تغییر داد، بازم تایم واقعی time zone ایران ثبت بشه ؟؟؟

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