Я долгое время работал в студии 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)
Это не NullPointerException. Это IllegalArgumentException, и он находится в com.alamkanak.weekview.WeekView. Если вы не хотите самостоятельно изменять код этой библиотеки, разработчику придется это исправить. Существуют новые ограничения на клипы Canvas, и они используют запрещенный Op (а именно, Region.Op.REPLACE) в этом классе.
Между прочим, эти ограничения являются новыми для Android P. Если вы просто хотите, чтобы ваш код работал, протестируйте его на более старой версии.
извините, я обновил сообщение об ошибке, я разместил неправильное сообщение
Прочтите трассировку стека. DatabaseHelper, на который вы вызываете addData() в addevent.AddData(), имеет нулевое значение.
Я использую оператор if, чтобы проверить, являются ли добавленные данные пустыми, если это не единственный способ использования addData
Не данные, а DatabaseHelper. Это ноль. Вы правильно создали и назначили его где-нибудь? То есть у вас есть какая-нибудь строка типа DatabaseHelper db = new DatabaseHelper(this);до, вызывающая db.addData(...)?
Ударил гвоздь по голове, я создал вспомогательный объект базы данных, никогда не инициализировал Спасибо за вашу помощь / время




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