Вызов класса конструктора с наборами и получение общих предпочтений из asyncTask (не может передать контекст) - PullRequest
1 голос
/ 17 июня 2020

Я получаю и устанавливаю sharedPreferences в классе конструктора

private Context context;
public NewBusiness (Context c) {
    this.context = c;
    pref = android.preference.PreferenceManager.getDefaultSharedPreferences(getApplicationContext());
    pref = context.getSharedPreferences("MyPref", 0);
    editor = pref.edit();
}
public String getLogo() {
    return pref.getString("logo", logo);
}

public void setLogo(String logo) {
    editor.putString("logo", logo);
    editor.commit();
}

Однако я вызываю это из задачи Asyn c (которая использует контекст WeakReference для предотвращения утечек памяти)

private WeakReference<Context> contextRef;
public UploadBusiness(Context context) {
    contextRef = new WeakReference<>(context);
}
@Override
protected String doInBackground(Void... params) {

    newBusiness = new NewBusiness(contextRef); //Can´t use WeakReference<Context>
    return "Upload successful";
}

Проблема в том, что контекст weakreference не может быть передан как контекст

Как мне вызвать мой класс конструктора с контекстом, не вызывая утечки памяти?

1 Ответ

1 голос
/ 17 июня 2020

Вам нужно использовать метод get () для экземпляра слабой ссылки, чтобы получить фактический объект. Примерно так:

private WeakReference<Context> contextRef;
public UploadBusiness(Context context) {
    contextRef = new WeakReference<>(context);
}
@Override
protected String doInBackground(Void... params) {

    if(contextRef.get()!=null){
        newBusiness = new NewBusiness(contextRef.get());
    } 
    return "Upload successful";
}
...