0

Пытаюсь создать приложение в Android Studio с базой данных(SQLite) чтоб сохранять данные на устройстве. Проблема в том что при запуске приложения на эмуляторе или на реальном устройстве, приложение вылетает как только я начинаю взаимодействовать с ним.

Может я неправильно указал адрес на мою базу данных. Если будут вопросы я попытаюсь предоставить больше информации. Это код класса DatabaseHelper

package com.example.f_a_10_22_2019;

import android.content.Context;
import android.database.SQLException;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.database.Cursor;
import android.util.Log;
import android.widget.Toast;

import androidx.annotation.Nullable;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;


public class DatabaseHelper extends SQLiteOpenHelper {
    private static final int DATABASE_VERSION = 1;
    static final String DB_PATH = "data/data/com.example.f_a_10_22_2019/databases/";
    static final String DB_NAME = "sozluk2.db";
    private SQLiteDatabase sqLiteDatabase;
     Context context;


    public DatabaseHelper(Context mContext) {
        super(mContext, DB_NAME, null, DATABASE_VERSION);
        mContext = context;
    }

    @Override
    public void onCreate(SQLiteDatabase db) {

    }

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

    }

    public void createDatabase() throws IOException{
        boolean dbExists = checkDataBase();
        if(dbExists){

        }
        else {
            getReadableDatabase();
            copyDatabase();
        }
    }

    public boolean checkDataBase() {
        SQLiteDatabase checkDB = null;
        try {
            String myPath = DB_PATH + DB_NAME;
            checkDB = SQLiteDatabase.openDatabase(myPath, null, SQLiteDatabase.OPEN_READONLY);
        }
        catch (SQLException e){}
        if (checkDB != null) {
            checkDB.close();

        }
        return  checkDB != null ? true : false;
    }

    public void copyDatabase() throws IOException {
        try {
            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();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    public void openDatabase() throws IOException{
        String myPath = DB_PATH + DB_NAME;
        sqLiteDatabase = SQLiteDatabase.openDatabase(myPath, null,SQLiteDatabase.OPEN_READONLY);
    }
    @Override
    public synchronized void close(){
        if(sqLiteDatabase != null) sqLiteDatabase.close();

        super.close();
    }
    public SQLiteDatabase getDatabase(){
        return sqLiteDatabase;
    }
}

тут же класс MainActivity


package com.example.f_a_10_22_2019;
import androidx.appcompat.app.AppCompatActivity;
import android.content.Context;
import android.database.Cursor;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
import java.io.IOException;

public class MainActivity extends AppCompatActivity {
    DatabaseHelper dbHelper;
    Context context = this;
    EditText trEdittext, enEdittext;
    Button btnCevir;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        dbHelper = new DatabaseHelper(context);
        try {
            dbHelper.createDatabase();
            dbHelper.openDatabase();
        }catch (IOException e){
            e.printStackTrace();
        }
        trEdittext = (EditText) findViewById(R.id.trEdittext);
        enEdittext = (EditText) findViewById(R.id.enEdittext);
        btnCevir = (Button) findViewById(R.id.btnCevir);
        btnCevir.setOnClickListener(new View.OnClickListener(){
            @Override
            public void onClick(View v){
                String turkceKelime = trEdittext.getText().toString();
                Cursor crs = dbHelper.getDatabase().query("kelimeler",new String[]{"kelimeEn"},"kelimeTr = ?",new String[]{turkceKelime},null,null,null);
                if(crs.getCount() > 0){
                    crs.moveToFirst();
                    String ingilizceKelime = crs.getString(crs.getColumnIndex("kelimeEn"));
                    enEdittext.setText(ingilizceKelime);
                }else {
                    Toast.makeText(context, "Kelimenin karsiligi bulunamadi", Toast.LENGTH_SHORT).show();
                    trEdittext.getText().clear();
                }

            }
        });
    }

    @Override
    protected void onStop() {
        super.onStop();
        dbHelper.close();
    }
}

Вот это выходит у меня в logcat

 --------- beginning of crash
2019-10-29 14:25:23.596 3359-3359/com.example.f_a_10_22_2019 E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.example.f_a_10_22_2019, PID: 3359
    android.database.sqlite.SQLiteException: no such table: kelimeler (code 1 SQLITE_ERROR): , while compiling: SELECT kelimeEn FROM kelimeler WHERE kelimeTr = ?
        at android.database.sqlite.SQLiteConnection.nativePrepareStatement(Native Method)
        at android.database.sqlite.SQLiteConnection.acquirePreparedStatement(SQLiteConnection.java:986)
        at android.database.sqlite.SQLiteConnection.prepare(SQLiteConnection.java:593)
        at android.database.sqlite.SQLiteSession.prepare(SQLiteSession.java:590)
        at android.database.sqlite.SQLiteProgram.<init>(SQLiteProgram.java:61)
        at android.database.sqlite.SQLiteQuery.<init>(SQLiteQuery.java:37)
        at android.database.sqlite.SQLiteDirectCursorDriver.query(SQLiteDirectCursorDriver.java:46)
        at android.database.sqlite.SQLiteDatabase.rawQueryWithFactory(SQLiteDatabase.java:1443)
        at android.database.sqlite.SQLiteDatabase.queryWithFactory(SQLiteDatabase.java:1290)
        at android.database.sqlite.SQLiteDatabase.query(SQLiteDatabase.java:1161)
        at android.database.sqlite.SQLiteDatabase.query(SQLiteDatabase.java:1329)
        at com.example.f_a_10_22_2019.MainActivity$1.onClick(MainActivity.java:36)
        at android.view.View.performClick(View.java:7125)
        at android.view.View.performClickInternal(View.java:7102)
        at android.view.View.access$3500(View.java:801)
        at android.view.View$PerformClick.run(View.java:27336)
        at android.os.Handler.handleCallback(Handler.java:883)
        at android.os.Handler.dispatchMessage(Handler.java:100)
        at android.os.Looper.loop(Looper.java:214)
        at android.app.ActivityThread.main(ActivityThread.java:7356)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:492)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:930)
2019-10-29 14:25:23.710 3359-3359/com.example.f_a_10_22_2019 I/Process: Sending signal. PID: 3359 SIG: 9

0 Answers0