Я пытаюсь отсортировать свою базу данных SQliteDatabase с помощью функции sharedpreferences, когда я добавляю sharedpreference в свой класс базы данных, он показывает нулевую ссылку на объект, я не знаю, как решить эту проблему, может кто-нибудь помочь, пожалуйста?я разместил свой logcat также ниже, пожалуйста, проверьте.
import android.content.ContentValues;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteQueryBuilder;
import android.preference.PreferenceManager;
import com.sample.quotes.QuoteActivity;
import com.sample.quotes.R;
import com.sample.quotes.datacon.QuoteData;
import com.readystatesoftware.sqliteasset.SQLiteAssetHelper;
import java.util.ArrayList;
import java.util.List;
import static android.content.Context.MODE_PRIVATE;
public class Database extends SQLiteAssetHelper{
public static final String DB_NAME="quote.db";
public static final int DB_VER=1;
PreferenceManager preferenceManager;
public Database(Context context) {
super(context, DB_NAME, null, DB_VER);
}
public List<QuoteData> getQuotes()
{
SQLiteDatabase db = getReadableDatabase();
SQLiteQueryBuilder qb = new SQLiteQueryBuilder();
String[] sqlSelect={"Id","Details","Headings","Categories"};
String tableName="TableOne";
qb.setTables(tableName);
SharedPreferences textColorPref = preferenceManager.getSharedPreferences();
String checked = textColorPref.getString("quotesSort", "");
if(checked.equals("")){
Cursor cursor = qb.query(db,sqlSelect,null,null,null,null,checked);
List<QuoteData> result = new ArrayList<>();
if(cursor.moveToFirst())
{
do{
QuoteData quotedata = new QuoteData();
quotedata.setId(cursor.getInt(cursor.getColumnIndex("Id")));
quotedata.setDetails(cursor.getString(cursor.getColumnIndex("Details")));
quotedata.setHeadings(cursor.getString(cursor.getColumnIndex("Headings")));
quotedata.setCategories(cursor.getString(cursor.getColumnIndex("Categories")));
result.add(quotedata);
}while (cursor.moveToNext());
}
return result;
} else {
Cursor cursor = qb.query(db,sqlSelect,null,null,null,null,null);
List<QuoteData> result = new ArrayList<>();
if(cursor.moveToFirst())
{
do{
QuoteData quotedata = new QuoteData();
quotedata.setId(cursor.getInt(cursor.getColumnIndex("Id")));
quotedata.setDetails(cursor.getString(cursor.getColumnIndex("Details")));
quotedata.setHeadings(cursor.getString(cursor.getColumnIndex("Headings")));
quotedata.setCategories(cursor.getString(cursor.getColumnIndex("Categories")));
result.add(quotedata);
}while (cursor.moveToNext());
}
return result;
}
}
public List<QuoteData> getQuotesByDetail(String details)
{
SQLiteDatabase db = getReadableDatabase();
SQLiteQueryBuilder qb = new SQLiteQueryBuilder();
String[] sqlSelect={"Id","Details","Headings","Categories"};
String tableName="TableOne";
qb.setTables(tableName);
// Cursor cursor = qb.query(db,sqlSelect,"Name = ?",new String[]
{name},null,null,null);
Cursor cursor = qb.query(db,sqlSelect,"Details LIKE ?",new String[]
{"%"+details+"%"},null,null,null);
List<QuoteData> result = new ArrayList<>();
if(cursor.moveToFirst())
{
do{
QuoteData quotedata = new QuoteData();
quotedata.setId(cursor.getInt(cursor.getColumnIndex("Id")));
quotedata.setDetails(cursor.getString(cursor.getColumnIndex("Details")));
quotedata.setHeadings(cursor.getString(cursor.getColumnIndex("Headings")));
quotedata.setCategories(cursor.getString(cursor.getColumnIndex("Categories")));
result.add(quotedata);
}while (cursor.moveToNext());
}
return result;
}
}
Stacktrace:
java.lang.RuntimeException: Unable to start activity ComponentInfo{QuoteActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'android.content.SharedPreferences android.preference.PreferenceManager.getSharedPreferences()' on a null object reference
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2439)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2499)
at android.app.ActivityThread.access$900(ActivityThread.java:166)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1360)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:148)
at android.app.ActivityThread.main(ActivityThread.java:5468)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'android.content.SharedPreferences android.preference.PreferenceManager.getSharedPreferences()' on a null object reference
at com.sample.quotes.database.Database.getQuotes(Database.java:45)
at com.sample.quotes.QuoteActivity.onCreate(QuoteActivity.java:81)
at android.app.Activity.performCreate(Activity.java:6556)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1108)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2392)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2499)
at android.app.ActivityThread.access$900(ActivityThread.java:166)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1360)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:148)
at android.app.ActivityThread.main(ActivityThread.java:5468)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)