Вылетает приложение. Работа с sqlite

197
08 февраля 2018, 16:51

Почему вылетает приложение. Начинаю работать с sqlite, простой вывод данных бд в listView не работет - приложение просто вылетает. В чем может быть причина? Код:

 public class MainActivity extends AppCompatActivity {
    Button btn;
    ListView list;
    SQLiteDatabase db;
    DatabaseHelper helper;
    SimpleCursorAdapter userAdapter;
    Cursor cursor;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        btn = findViewById(R.id.button);
        list = findViewById(R.id.list);
        helper = new DatabaseHelper (getApplicationContext());
        helper.create_db();
    }
    @Override
    protected void onResume() {
        super.onResume();
        db = DatabaseHelper.open();
        String[] headres = new String[]{ DatabaseHelper.COLUMN_RECEPT, DatabaseHelper.COLUMN_INGRIDIENT };
        cursor = db.rawQuery("select * from " + DatabaseHelper.TABLE, null);
        userAdapter = new SimpleCursorAdapter (this, android.R.layout.two_line_list_item, cursor,
        headres, new int[]{ android.R.id.text1, android.R.id.text2 }, 0);
        list.setAdapter(userAdapter);
    }
    @Override
    protected void onDestroy() {
        super.onDestroy();
        db.close();
        cursor.close();
    }
}

Логи:

02-06 21:32:54.102 1520-1520/com.example.len.recept E/AndroidRuntime: FATAL EXCEPTION: main
                                                                  Process: com.example.len.recept, PID: 1520
                                                                  java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.len.recept/com.example.len.recept.MainActivity}: java.lang.IllegalArgumentException: Empty file name
                                                                      at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2702)
                                                                      at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2768)
                                                                      at android.app.ActivityThread.access$900(ActivityThread.java:190)
                                                                      at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1590)
                                                                      at android.os.Handler.dispatchMessage(Handler.java:111)
                                                                      at android.os.Looper.loop(Looper.java:207)
                                                                      at android.app.ActivityThread.main(ActivityThread.java:5927)
                                                                      at java.lang.reflect.Method.invoke(Native Method)
                                                                      at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:958)
                                                                      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:819)
                                                                   Caused by: java.lang.IllegalArgumentException: Empty file name
                                                                      at android.content.res.AssetManager.openAsset(Native Method)
                                                                      at android.content.res.AssetManager.open(AssetManager.java:336)
                                                                      at android.content.res.AssetManager.open(AssetManager.java:310)
                                                                      at com.example.len.recept.DatabaseHelper.create_db(DatabaseHelper.java:50)
                                                                      at com.example.len.recept.MainActivity.onCreate(MainActivity.java:28)
                                                                      at android.app.Activity.performCreate(Activity.java:6362)
                                                                      at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1122)
                                                                      at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2655)
                                                                      at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2768) 
                                                                      at android.app.ActivityThread.access$900(ActivityThread.java:190) 
                                                                      at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1590) 
                                                                      at android.os.Handler.dispatchMessage(Handler.java:111) 
                                                                      at android.os.Looper.loop(Looper.java:207) 
                                                                      at android.app.ActivityThread.main(ActivityThread.java:5927) 
                                                                      at java.lang.reflect.Method.invoke(Native Method) 
                                                                      at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:958) 
                                                                      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:819) 

Судя по логам происходит ошибка в этом методе:

    void create_db(){
    InputStream myInput=null;
    OutputStream myOutput=null;
    try {
        File file = new File(DB_PATH);
        if (!file.exists()){
            this.getReadableDatabase();
            myInput = myContext.getAssets().open(DB_NAME); // ОШИБКА ЗДЕСЬ
            String outFileName = DB_PATH;
            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 ex){
        Log.d("DatabaseHelper",ex.getMessage());
    }
}

Но я не понимаю, что в моем коде работает неправильно.

READ ALSO
Не печатаемые символы в заголовке окна eclipse (DBeaver)

Не печатаемые символы в заголовке окна eclipse (DBeaver)

Не печатаемые символы в заголовке окна eclipse, на скриншотеЛокаль ru_RU

312
По IDE Eclipse, горячие клавиши

По IDE Eclipse, горячие клавиши

Есть в Eclipse горячие клавиши комментирования кода(строки, блока) Так вот, они не работаютНикак

196
Форматирование дат и чисел в тексте

Форматирование дат и чисел в тексте

Суть задачи: Есть текст в котором есть даты разного формата 12/9/2010, 1509

171
слушатель буфера обмена

слушатель буфера обмена

Возможно ли написать программу без UI , которая будет слушать изменения в буфере обмена? Например: запустил программу, далее захожу например...

209