1

Мне действительно не нужен код для этого, просто структура его выполнения.Нужен ContentProvider для доступа к SharedPreferences

Я работаю над приложением, в котором у меня есть BaseAtivity (extends Activity) с рядом методов и внутренним классом User. Все другие действия в моем приложении расширяют BaseAtivity.

Класс пользователя имеет методы чтения и записи данных с использованием SharedPreferences. Таким образом, LoginActivity расширяет BaseActivity, и при правильном входе он вызывает User.login (args), чтобы создать общую переменную (в MODE_PRIVATE) с идентификатором пользователя, электронной почтой пользователя и json с пользовательскими настройками.

Мне нужно создать поставщика контента, который будет использовать query() для извлечения данных из вошедшего в систему пользователя. поставщик контента получит данные из sharedpreferences и предоставит им аппликацию, вызывающую Content Provider.

Поскольку мой контент-провайдер расширяет ContentProvider, я не могу расширить BaseActivity (это может быть решение). При вызове метода в ContentProvider в OnCreate()

User user = new BaseActivity.User(); 

я получаю ошибку .... «„com.example.myapp.BaseActivity“не является классом вшита».

Есть ли способ вызвать внутреннего пользователя класса из моего ContentProvider?

+0

Хм, вам действительно нужно «ContentProvider» в этом случае? –

+0

@Ye Lin Aung, мне нужно предоставить функциональность некоторым внешним приложениям для доступа к данным пользователя. как я мог это сделать? Я просто пытался получить доступ к SharedPreferences из класса поставщика контента (поэтому myContentProvider расширяет ContentProvider реализует SharedPreferences), но при попытке настроек SharedPreferences = getSharedPreferences (R.string.PREFS_NAME, ""); Я получаю сообщение об ошибке: не удается найти метод символов getSharedPreferences (int, String) – geoak

ответ

1

Хорошо, я решил проблему, подобную этой. Я не нашел способ использовать внутренний класс User, но доступ к SharedPreferences.

public class UserProfileProvider extends ContentProvider implements SharedPreferences { 


    @Override 
    public boolean onCreate() { 
     SharedPreferences settings = getContext().getSharedPreferences(getContext().getResources().getString(R.string.PREFS_NAME), getContext().MODE_PRIVATE); 
     Log.d("akis", ":::userProfileProvider:::" + settings.getString(getContext().getResources().getString(R.string.USER_PREFERENCES), "default")); 
     return false; 
    } 

Конечно, вы должны добавить все методы, которые должны быть переопределены исполнителями SharedPreferences

+0

Путем downvoting, не оставляя комментариев о том, что не так с этим решением, не является хорошей prcatice. Вы ничего не добавляете к этому сообществу. – geoak

+0

Спасибо, это спасло меня. Мне трудно получать данные из моих SharedPreferences из моего класса ContentProvider. – zeeshan

2

Если вам необходимо получить доступ SharedPreferences из ContentProvider только вам не нужно даже ваш ContentProvider реализовать SharedPreferences, потому что getSharedPreferences() - это метод контекста, который доступен из метода getContext() класса ContentProvider.

+0

Я видел для этого использование. Android теперь устарел для Context.MODE_MULTIPROCESS для общих привилегий. Я сделал это для приложения в 2014 году, которое использует виджеты. –

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