Android 在 SQLite 数据库文件中获取 Sharedpreferences

标签 android sqlite sharedpreferences android-sqlite android-context

我的 DBTool.java 类中有这个 sharedpreference 类,它给了我这个错误 The method getDefaultSharedPreferences(Context) in the type PreferenceManager is not applicable for the arguments (DBTools)"。在 getAllcontact() 方法中。 ……

这是 DBTools.java 类

打包com.mall.our;

    import java.util.ArrayList;
    import java.util.HashMap;

    import com.mall.first.MainActivity;

    import android.content.ContentValues;
    import android.content.Context;
    import android.content.ContextWrapper;
    import android.content.SharedPreferences;
    import android.database.Cursor;
    import android.database.sqlite.SQLiteDatabase;
    import android.database.sqlite.SQLiteOpenHelper;
    import android.preference.PreferenceManager;

    public class DBTools extends SQLiteOpenHelper {


        public DBTools(Context applicationContext){

            super(applicationContext, "contactbook.db", null, 1);

        }

        @Override
        public void onCreate(SQLiteDatabase database) {

            String query = "CREATE TABLE contacts ( contactId INTEGER PRIMARY KEY, fromm TEXT, too TEXT ," +
                    "state TEXT, message TEXT, time TEXT, latest TEXT, rig TEXT, picc TEXT)";

            database.execSQL(query);

        }

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

            String query = "DROP TABLE IF EXISTS contacts";

            database.execSQL(query);
            onCreate(database);

        }

        public void insertContact(HashMap<String, String> queryValues){

            SQLiteDatabase database = this.getWritableDatabase();

            ContentValues values = new ContentValues();

            values.put("fromm", queryValues.get("fromm"));
            values.put("too", queryValues.get("too"));


            database.insert("contacts", null, values);

            database.close();

        }

        public int updateContact(HashMap<String, String> queryValues){

            SQLiteDatabase database = this.getWritableDatabase();

            ContentValues values = new ContentValues();

            values.put("fromm", queryValues.get("fromm"));
            values.put("too", queryValues.get("too"));

            return database.update("contacts", values, 
                    "contactId" + " = ?", new String[] {queryValues.get("contactId") });

        }

        public void deleteContact(String id){

            SQLiteDatabase database = this.getWritableDatabase();

            String deleteQuery = "DELETE FROM contacts WHERE contactId='" + id + "'";

            database.execSQL(deleteQuery);

        }

        public ArrayList<HashMap<String, String>> getAllContacts(){

            ArrayList<HashMap<String, String>> contactArrayList = new ArrayList<HashMap<String, String>>();


            SharedPreferences sp = PreferenceManager
                    .getDefaultSharedPreferences(DBTools.this);
            String friend = sp.getString("user", "anon");

            String selectQuery = "SELECT * FROM contacts WHERE too='" + friend + "'";


            SQLiteDatabase database = this.getWritableDatabase();

            Cursor cursor = database.rawQuery(selectQuery, null);

            if(cursor.moveToFirst()){

                do{

                    HashMap<String, String> contactMap = new HashMap<String, String>();

                    contactMap.put("contactId", cursor.getString(0));
                    contactMap.put("fromm", cursor.getString(1));
                    contactMap.put("too", cursor.getString(2));


                    contactArrayList.add(contactMap);

                } while(cursor.moveToNext());

            }

            return contactArrayList;

        }

        public HashMap<String, String> getContactInfo(String id){

            HashMap<String, String> contactMap = new HashMap<String, String>();

            SQLiteDatabase database = this.getReadableDatabase();

            String selectQuery = "SELECT * FROM contacts WHERE contactId='" + id + "'";

            Cursor cursor = database.rawQuery(selectQuery, null);

            if(cursor.moveToFirst()){

                do{

                    contactMap.put("contactId", cursor.getString(0));
                    contactMap.put("fromm", cursor.getString(1));
                    contactMap.put("too", cursor.getString(2));


                } while(cursor.moveToNext());

            }

            return contactMap;

        }

    }

最佳答案

您没有传递正确的 ContextSQLiteOpenHelper 类不是从 Context 派生的,因此不能充当有效的 Context

在您的 DBTools 类中,创建一个变量

private Context appContext;

并在构造函数中初始化:

public DBTools(Context applicationContext){

    super(applicationContext, "contactbook.db", null, 1);
    this.appContext = applicationContext;

}

现在,替换

SharedPreferences sp = PreferenceManager
                .getDefaultSharedPreferences(DBTools.this);

SharedPreferences sp = PreferenceManager
                .getDefaultSharedPreferences(appContext);

关于Android 在 SQLite 数据库文件中获取 Sharedpreferences,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29165750/

相关文章:

java - 尝试启动我的应用程序时出现 NullPointerException

自定义 ListView 中的 Android SharedPreference

python - SQLite 中的连接语句出现问题

javascript - Firefox 扩展中的 SQLite3 错误

android - onLocationChanged() 被调用太多次,即使设备没有移动

java - 我如何通过android中的 Activity 发送图像

sqlite - Flutter SQLite数据库表存在但未被SQFLite检测到

java - 如何在另一个 Activity 中检索共享首选项的值?

android - 亚行外壳 : How do I get a list of BroadcastReceivers that will receive BOOT_COMPLETED Intent?

java - OpenCV Grabcut 仅输出标记为 GC_FGD 的内容