0

, пожалуйста, у меня есть этот класс sharedpreference в моем классе DBTool.java, и он дает мне эту ошибку. Метод getDefaultSharedPreferences (Context) в типе PreferenceManager не применим для аргументов (DBTools) ". В методе getAllcontact() .......Android получить Sharedpreferences в файле базы данных SQLite

это класс 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; 

     } 

    } 

ответ

2

Вы не проходящее право Context. Класс SQLiteOpenHelper равен n ot от 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); 
0

Вам необходимо передать свой метод объекту Context или ссылаться на объект контекста в вашем классе.

public ArrayList<HashMap<String, String>> getAllContacts(Context context) { 
    ArrayList<HashMap<String, String>> contactArrayList = new ArrayList<HashMap<String, String>>(); 

    SharedPreferences sp = PreferenceManager 
       .getDefaultSharedPreferences(context); 

Вы также можете использовать getApplicationContext() получить контекст, однако описанный выше метод является более безопасным.

Вы можете безопасно получить контекст от активности вы вызова метода из с yourActivity.getContext()

1

getDefaultSharedPreferences (Context) в типе PreferenceManager является не применяется для аргументов (DBTools)

Поскольку getDefaultSharedPreferences принимает Контекстный объект как параметры вместо DBTools.this или любого другого контекста класса.

Чтобы исправить этот вопрос создать частный объект контекста, как присвоить значение в объекте внутри DBTools конструктор класса, в котором вы передаете контекст при создании объекта DBTools класса:

private Context mContext; 
    public DBTools(Context applicationContext){ 
     super(applicationContext, "contactbook.db", null, 1); 
     this.mContext=applicationContext; 
    } 

Теперь используйте mContext в качестве параметра getDefaultSharedPreferences метод:

SharedPreferences sp = PreferenceManager 
          .getDefaultSharedPreferences(mContext); 

 Смежные вопросы

  • Нет связанных вопросов^_^