متصل نشدن به دیتابیس

0 امتیاز
53 بازدید
سوال شده خرداد 19, 1395 توسط android  

سلام جناب آشکاران

من توی app که دارم درست میکنم ویخوام یه FloatingActionButton داشته باشم که وقتی روی اون کلیک شد اون درس وارد لیست علاقه مندی ها بشه.

من به این شکل کار کردم که وقتی کسی اولین بار وارد درس میشه آیکن Float رنگش قرمز باشه و وقتی روی اون کلیک کرد که وارد لیست علاقه مندی ها بشه رنگش تبدیل به سبز بشه.

من تمامه این کارها رو انجام دادم اما مشکل اینه که وقتی کلیک میکنم و رنگش سبز میشه و دکمه ی back رو میزنم و بعدش دوباره وارد اون درس میشم دکمه مجددا رنگش قرمز شده یعنی انگار با دیتابیس ارتباط برقرار نکرده.کدهای دیابیس و فرگمنت درسی رو که دارم روش کار میکنم میزارم ممنون میشم بررسی بفرمائید که مشکل از کجاست

کدهای کلاس دیتابیس:

package classes;

import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteException;
import android.database.sqlite.SQLiteOpenHelper;
import android.os.Build;
import android.os.Environment;
import android.util.Log;

import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;

/**
 * Created by linux on 5/20/16.
 */
//avval kelase database ro misazim va extends mikonim
public class DatabaseHelper extends SQLiteOpenHelper {
    private Context context;
    private SQLiteDatabase myDatabase ;

    public DatabaseHelper(Context context) {
        //dovvom ye celase dg misazim va yekseri maghadir ro behesh midim k azuna dar zir estefade kardam.Info_db
        super(context, Info_db.DB_NAME, null, Info_db.DB_VERSION);
//sevvom shart gozashtam baraye inke ba tavajo b noskhe sdk masir ro moshakhas konam baraye zakhireie database
        if (Build.VERSION.SDK_INT >= 15){
            Info_db.DB_PATH = context.getApplicationInfo().dataDir + "/databases/";
        }else{
            Info_db.DB_PATH = Environment.getDataDirectory() +" /data/ "+ context.getPackageName() + " /databases/ ";
        }
        this.context = context;
    }

    @Override
    public void onCreate(SQLiteDatabase db) {

    }

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

    }

    public void checkAndCopyDatabase(){
        boolean dbExist = checkDatabase();
        if (dbExist){
            Log.d("TAG", "database already exist");
        }else {
            this.getReadableDatabase();
        }

        try {
            copyDataBase();
        } catch (IOException e) {
            e.printStackTrace();
            Log.d("TAG", "Error copy database");
        }
    }

    public boolean checkDatabase(){
        SQLiteDatabase checkDB = null;
        try {


        String myPath = Info_db.DB_PATH + Info_db.DB_NAME;
        checkDB = SQLiteDatabase.openDatabase(myPath, null, SQLiteDatabase.OPEN_READWRITE);
        }catch (SQLiteException e){

        }

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

    /**
     * Copies your database from your local assets-folder to the just created
     * empty database in the system folder, from where it can be accessed and
     * handled. This is done by transfering bytestream.
     * */
    private void copyDataBase() throws IOException {
        // Open your local db as the input stream
        InputStream myInput = context.getAssets().open(Info_db.DB_NAME);
        // Path to the just created empty db
        String outFileName = Info_db.DB_PATH + Info_db.DB_NAME;
        // Open the empty db as the output stream
        OutputStream myOutput = new FileOutputStream(outFileName);
        // transfer bytes from the inputfile to the outputfile
        byte[] buffer = new byte[1024];
        int length;
        while ((length = myInput.read(buffer)) > 0) {
            myOutput.write(buffer, 0, length);
        }
        // Close the streams
        myOutput.flush();
        myOutput.close();
        myInput.close();
    }

    public void openDatabase(){
        String myPath = Info_db.DB_PATH + Info_db.DB_NAME;
        myDatabase = SQLiteDatabase.openDatabase(myPath, null, SQLiteDatabase.OPEN_READWRITE);
    }

    public synchronized void close(){
        if (myDatabase !=null){
            myDatabase.close();
        }
        super.close();
    }

    public Cursor QueryData(String query){
        return myDatabase.rawQuery(query, null);
    }

   //pass kardane etelaati k mikhaim(pass kardane oon chizi k hast)
    public int fav_value(int id){
        SQLiteDatabase db = this.getReadableDatabase();
        String query = "SELECT "+Info_db.Data_Fav+" FROM "+Info_db.Table_Name+" where "+Info_db.Data_Id+" = "+id+"";
        int value = 0;
        Cursor cursor = db.rawQuery(query, null);
        if (cursor.moveToFirst()){
            value = cursor.getInt(cursor.getColumnIndex(Info_db.Data_Fav));

            do {


            }while (cursor.moveToNext());
        }

        db.close();
        return value;
    }

    public void fav(int status, int id){
        SQLiteDatabase db = this.getWritableDatabase();
        String query = "UPDATE "+Info_db.Table_Name+" SET "+Info_db.Data_Fav+" ="+status+" " +
                "WHERE "+Info_db.Data_Id+"="+id+" ";
        db.execSQL(query);
        db.close();
    }
}

 

 

کدهای کلاس فرگنت:

package frags;


import android.database.Cursor;
import android.database.sqlite.SQLiteException;
import android.graphics.Color;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Toast;

import com.example.linux.book.R;
import com.melnykov.fab.FloatingActionButton;

import java.util.ArrayList;

import adapters.Adapter_first;
import classes.DatabaseHelper;
import classes.Info_data;
import classes.OnTopListener;
import jp.wasabeef.recyclerview.adapters.AlphaInAnimationAdapter;
import jp.wasabeef.recyclerview.adapters.ScaleInAnimationAdapter;


/**
 * A simple {@link Fragment} subclass.
 */
public class Frag_first extends Fragment {

    private RecyclerView recyclerView;
    private DatabaseHelper databaseHelper;
    private ArrayList<Info_data> arrayList = new ArrayList<Info_data>();
    private Cursor cursor;
    private Adapter_first adapter_first;
    private FloatingActionButton floatingActionButton;
    public static int id;
    public int value ;

    public Frag_first() {
        // Required empty public constructor
    }


    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        // Inflate the layout for this fragment
        ViewGroup viewGroup = (ViewGroup) inflater.inflate(R.layout.fragment_frag_first,container,false);
        recyclerView = (RecyclerView) viewGroup.findViewById(R.id.recy_504_first);
        floatingActionButton = (FloatingActionButton) viewGroup.findViewById(R.id.fab);
        floatingActionButton.attachToRecyclerView(recyclerView);

        databaseHelper = new DatabaseHelper(getActivity());
          value = databaseHelper.fav_value(id);
          if (value == 0){
            //setColorRed
            floatingActionButton.setColorFilter(Color.argb(255, 255, 0, 17));
        }else {
            //setColorGreen
            floatingActionButton.setColorFilter(Color.argb(255, 0, 255, 124));
        }


        floatingActionButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                if (value == 0){
                    databaseHelper.fav(1, id);
                    //setColorGreen
                    floatingActionButton.setColorFilter(Color.argb(255, 0, 255, 124));

                }else {
                    databaseHelper.fav(0, id);
                    //setColorRed
                    floatingActionButton.setColorFilter(Color.argb(255, 255, 0, 17));
                }

                value = databaseHelper.fav_value(id);

            }
        });



        loadDatabase();
        return viewGroup;
    }

    public void loadDatabase (){
        databaseHelper = new DatabaseHelper(getActivity());
        try {


        databaseHelper.checkAndCopyDatabase();
        databaseHelper.openDatabase();
        }catch (SQLiteException e){
            e.printStackTrace();
        }
        try {

        cursor = databaseHelper.QueryData("SELECT * FROM tbl_504 COMPANY LIMIT 0,12");
        if (cursor != null){
            if (cursor.moveToFirst()){
                do {
                    Info_data info_data = new Info_data();
                    info_data.setWord(cursor.getString(1));
                    info_data.setMean(cursor.getString(2));
                    info_data.setCoding(cursor.getString(3));
                    info_data.setSynon(cursor.getString(4));
                    info_data.setSpell(cursor.getString(6));

                    arrayList.add((info_data));
                }while (cursor.moveToNext());
            }
        }
        }catch (SQLiteException e){
            e.printStackTrace();
        }
        LinearLayoutManager linearLayoutManager = new LinearLayoutManager(getContext());
        adapter_first = new Adapter_first(getActivity(), arrayList);
        adapter_first.setOnTopListener(new OnTopListener() {
            @Override
            public void OnTopView(int position) {
                Toast.makeText(getContext(), "Click to" + position, Toast.LENGTH_SHORT).show();

            }
        });
        recyclerView.setHasFixedSize(true);
        recyclerView.setLayoutManager(linearLayoutManager);
        AlphaInAnimationAdapter alphaInAnimationAdapter = new AlphaInAnimationAdapter(adapter_first);
        ScaleInAnimationAdapter scaleInAnimationAdapter = new ScaleInAnimationAdapter(alphaInAnimationAdapter);
        scaleInAnimationAdapter.setDuration(500);
        scaleInAnimationAdapter.setFirstOnly(false);
        recyclerView.setAdapter(scaleInAnimationAdapter);
    }

}


 

 

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

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

1 پاسخ

0 امتیاز
پاسخ داده شده خرداد 19, 1395 توسط ASHKARAN  
سلام

چرا دیتابیس؟؟؟؟؟

از SharedPreferences استفاده کنید

هزینه کمتری برای برنامتون داره....
دارای دیدگاه خرداد 19, 1395 توسط android  
آخه چون کل برنامه با یک دیتابیس خارجی کار میکرد خواستم از همون دیتابیس استفاده کنم.با آموزش SharedPreferences که توی دورتون هست میشه این کار رو انجام داد یا متفاوت از اون مباحثیه که اونجا گفتید
دارای دیدگاه خرداد 22, 1395 توسط ASHKARAN  
نه  اصلا چیزی نداره،

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

تا جایی که می تونید به دیتابیس وصل نشید !

شاید در ضاهر زیاد متفاوت نباشه، اما در کل روی روند برنامه های بزرگ خیلی موثره

971 سوال

817 پاسخ

1,318 دیدگاه

1,270 کاربر

متاسفانه نیستم

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

ali.ashkaran@gmail
ما .....
  • سعی بر پاسخگویی به سوالات دیگران داریم.
  • به سوال و یا نظر دیگران احترام می گذاریم .
  • این وبسایت را به دیگران معرفی می کنیم.
  • همواره صمیمیت و ادب را رعایت می کنیم.
  • به سوالمان برچسب های مرتبط اضافه می کنیم.
  • در حین طرح سوال فرد خاصی را مخاطب قرار نمی دهیم .
...