hamidreza.kh

مشکل در دیتابیس

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

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

به یه مشکلی خوردم تو فراخونی دیتابیس،نکته عجیبش اینه که من کدای دیتابیس رو دستکاری نکردم فقط از دیتابیس لوکاس استفاده میکنم یه سری تغییرات تو ستون های هر جدول تو دیتابیسم دادم و جالب تر از اون اینکه حالا که کدارو به حالت نرمالم برمیگردونم بازم ارور میده و میگه دیتابیس کپی نمیشه و نمیتونه باز بشه !!!

این لیست کلاس دیتابیسم:

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) {

            e.printStackTrace();
            throw new Error("Error copying database");
        }

    }

    private boolean checkDatabase() {
        SQLiteDatabase checkDB = null;
        try {
            String myPath = DB_PATH + DB_NAME;
            checkDB.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 void onCreate(SQLiteDatabase db) {
       ///DO NOTHING

    }


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

    }

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

کلاس پست هایی که میخوام بگیرم از دیتابیس

public class WordsActivity extends AppCompatActivity {

    private List<Word> words;
    DatabaseManager db;

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

        loadDatabase();

        TextAdapter wordsAdapter = new TextAdapter(this,words);
        RecyclerView recyclerView = (RecyclerView) findViewById(R.id.recycler_view);
        recyclerView.setLayoutManager(new GridLayoutManager(WordsActivity.this, 2, LinearLayoutManager.VERTICAL, false));
        recyclerView.setAdapter(wordsAdapter);

    }

    public void loadDatabase() {

        db=new DatabaseManager(WordsActivity.this);

        db.createDatabase();
        db.openDataBase();

        words=new ArrayList<>();

        Cursor cursor = db.queryData(" SELECT * FROM " + DatabaseManager.DB_TABLE_WORDS);
        if (cursor != null) {
            if (cursor.moveToFirst()) {
                do {
                    Word word = new Word();

                    word.setId(cursor.getInt(0));
                    word.setTitle(cursor.getString(1));
                    word.setImageview(cursor.getString(2));
                    word.setSound(cursor.getString(3));

               words.add(word);
                } while (cursor.moveToNext());
            }
        }
        db.close();
    }

}

 

اینم کلاس اداپترم

public class TextAdapter extends RecyclerView.Adapter<TextAdapter.TestViewHolder> {

    private Context context;
    private List<Word> words;

    public TextAdapter(Context context, List<Word> words) {

        this.context = context;
        this.words = words;
    }


    @Override
    public TestViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View view = LayoutInflater.from(context).inflate(R.layout.tutorial_boxs_layout, parent, false);
        return new TestViewHolder(view);
    }

    @Override
    public void onBindViewHolder(final TestViewHolder holder, int position) {

        final Word word=words.get(position);
        holder.txtTitle.setText(word.getTitle());

        int resID = context.getResources().getIdentifier(word.getImageview(), "mipmap", context.getPackageName());
            holder.imageWord.setImageResource(resID);


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

                Intent intent=new Intent(context, WordActivity.class);

                intent.putExtra("id",word.getId());
                intent.putExtra("word",word.getTitle());
                intent.putExtra("image",word.getImageview());
                intent.putExtra("sound",word.getSound());

                context.startActivity(intent);

            }
        });
    }


    @Override
    public int getItemCount() {
        return words.size();
    }


    public class TestViewHolder extends RecyclerView.ViewHolder {

        private TextView txtTitle;
        private ImageView imageWord;


        public TestViewHolder(View itemView) {
            super(itemView);

            txtTitle = (TextView) itemView.findViewById(R.id.box_title);
            imageWord = (ImageView) itemView.findViewById(R.id.box_image);

        }
    }
}

اینم ارور هایی که میده

   --------- beginning of crash
01-09 13:30:00.085 4969-4969/com.wordstutorial.hamidrezak.wordstutorials E/AndroidRuntime: FATAL EXCEPTION: main
                                                                                           Process: com.wordstutorial.hamidrezak.wordstutorials, PID: 4969
                                                                                           java.lang.Error: Error copying database
                                                                                               at com.wordstutorial.hamidrezak.wordstutorials.DatabaseManager.createDatabase(DatabaseManager.java:57)
                                                                                               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)

 

 

مشکل از کجاست؟؟

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


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

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

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


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

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

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

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

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


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

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

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


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