База данных, показывающая нулевой указатель в студии Android

Я долгое время работал в студии Android, но у меня всегда были проблемы с внедрением баз данных. Я пытаюсь сделать то же самое с этим, но получаю ужасное исключение нулевого указателя. Кроме того, насколько я могу судить, они избавились от ddms, поэтому я не могу просматривать свою базу данных, знает ли кто-нибудь другой способ, которым я занимался онлайн-копанием, но либо мне не хватает модуля, либо ответы устарели

package com.example.wasi.familyschedualer;

import android.content.ContentValues;
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.util.Log;


public class DatabaseHelper extends SQLiteOpenHelper {
    private static final String TAG  = "DatabaseHelper";
    private static final String TABLE_NAME  = "Wasi";
    private static final String DATE = "date";
    private static final String Start = "startTime";
    private static final String End = "endTime";
    private static final String Location = "Location";
    private static final String eventName = "EventName";

    public DatabaseHelper(Context x){
        super(x,TABLE_NAME,null,5);
    }
    @Override
    public void onCreate(SQLiteDatabase sqldb){
        String MakrTable = "CREATE TABLE "+ TABLE_NAME+" (\n" +
                "    date varchar(255),\n" +
                "    startTime varchar(255),\n" +
                "    endTime varchar(255),\n"+
                "    EventName varchar(255),\n"+
                "    Location varchar(255)\n"+
                " );";
        sqldb.execSQL(MakrTable);
    }
    @Override
    public void onUpgrade(SQLiteDatabase sqldb, int i, int i1){
        sqldb.execSQL("DROP TABLE IF EXISTS "+TABLE_NAME);
        onCreate(sqldb);
    }

    public boolean addData(String TableName,String location, String eventname,String date, String start, String end){
        SQLiteDatabase db =this.getWritableDatabase();
        ContentValues contentValues= new ContentValues();
        contentValues.put(DATE, date);
        contentValues.put(Start, start);
        contentValues.put(End, end);
        contentValues.put(eventName, eventname);
        contentValues.put(Location, location);

        Log.d(TAG, "addData: Adding "+ date+" "+start+" "+end +" to "+ TABLE_NAME);
        long result =db.insert(TABLE_NAME,null, contentValues);
        if (result==-1)return false;
        else return true;
    }

}

и вот ошибка

E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.example.wasi.familyschedualer, PID: 18222
    java.lang.IllegalStateException: Could not execute method for android:onClick
        at android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:390)
        at android.view.View.performClick(View.java:6294)
        at android.view.View$PerformClick.run(View.java:24770)
        at android.os.Handler.handleCallback(Handler.java:790)
        at android.os.Handler.dispatchMessage(Handler.java:99)
        at android.os.Looper.loop(Looper.java:164)
        at android.app.ActivityThread.main(ActivityThread.java:6494)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:438)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:807)
     Caused by: java.lang.reflect.InvocationTargetException
        at java.lang.reflect.Method.invoke(Native Method)
        at android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:385)
        at android.view.View.performClick(View.java:6294) 
        at android.view.View$PerformClick.run(View.java:24770) 
        at android.os.Handler.handleCallback(Handler.java:790) 
        at android.os.Handler.dispatchMessage(Handler.java:99) 
        at android.os.Looper.loop(Looper.java:164) 
        at android.app.ActivityThread.main(ActivityThread.java:6494) 
        at java.lang.reflect.Method.invoke(Native Method) 
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:438) 
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:807) 
     Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'boolean com.example.wasi.familyschedualer.DatabaseHelper.addData(java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String)' on a null object reference
        at com.example.wasi.familyschedualer.addevent.AddData(addevent.java:131)
        at java.lang.reflect.Method.invoke(Native Method) 
        at android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:385) 
        at android.view.View.performClick(View.java:6294) 
        at android.view.View$PerformClick.run(View.java:24770) 
        at android.os.Handler.handleCallback(Handler.java:790) 
        at android.os.Handler.dispatchMessage(Handler.java:99) 
        at android.os.Looper.loop(Looper.java:164) 
        at android.app.ActivityThread.main(ActivityThread.java:6494) 
        at java.lang.reflect.Method.invoke(Native Method) 
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:438) 
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:807) 

Ваша ошибка, похоже, не имеет никакого отношения к доступу к БД - прочтите трассировку стека, и вы увидите, что это происходит на com.alamkanak.weekview.WeekView.drawHeaderRowAndEvents(WeekV‌​iew.java:591) at com.alamkanak.weekview.WeekView.onDraw(WeekView.java:488)

Scary Wombat 19.11.2018 01:09

Это не NullPointerException. Это IllegalArgumentException, и он находится в com.alamkanak.weekview.WeekView. Если вы не хотите самостоятельно изменять код этой библиотеки, разработчику придется это исправить. Существуют новые ограничения на клипы Canvas, и они используют запрещенный Op (а именно, Region.Op.REPLACE) в этом классе.

Mike M. 19.11.2018 01:10

Между прочим, эти ограничения являются новыми для Android P. Если вы просто хотите, чтобы ваш код работал, протестируйте его на более старой версии.

Mike M. 19.11.2018 01:25

извините, я обновил сообщение об ошибке, я разместил неправильное сообщение

wasi hassan 19.11.2018 01:31

Прочтите трассировку стека. DatabaseHelper, на который вы вызываете addData() в addevent.AddData(), имеет нулевое значение.

Mike M. 19.11.2018 01:33

Я использую оператор if, чтобы проверить, являются ли добавленные данные пустыми, если это не единственный способ использования addData

wasi hassan 19.11.2018 01:43

Не данные, а DatabaseHelper. Это ноль. Вы правильно создали и назначили его где-нибудь? То есть у вас есть какая-нибудь строка типа DatabaseHelper db = new DatabaseHelper(this);до, вызывающая db.addData(...)?

Mike M. 19.11.2018 01:55

Ударил гвоздь по голове, я создал вспомогательный объект базы данных, никогда не инициализировал Спасибо за вашу помощь / время

wasi hassan 20.11.2018 02:36
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
8
23
0

Другие вопросы по теме