Невозможно передать контекст из onpostexecute в общие настройки - PullRequest
0 голосов
/ 16 января 2019

У меня есть класс asyctask и класс sharedpreferences. в AsyncTask> onpostexecute после успешного входа в систему я хочу установить значения для сеанса с использованием sharedpreferences, для этого мне нужно передать контекст в класс sharedpreferences, но в onpostexecute() он говорит, что контекст не может быть применен.

сеанс

public class Session{
    SharedPreferences prefs;
    Context c;
    private String emailid = "";
    public String getEmailid() {
        emailid=prefs.getString("emailid","");
        return emailid;
    }
    public void setEmailid(String emailid) {
        this.emailid = emailid;
        prefs.edit().putString("emailid",emailid).commit();
    }
    public void Session(Context c){
        this.c = c;
        prefs = c.getSharedPreferences("session_data",Context.MODE_PRIVATE);
    }

}

AsyncTask

@Override
    protected void onPostExecute(String result) {
        String data = result;
        String success_code = "";
        try {
            JSONObject jObj = new JSONObject(data);
            success_code = jObj.getString("resp_code");
            Toast.makeText(c,data,Toast.LENGTH_LONG).show();
            if(success_code.equals("1")){
                Toast.makeText(c,"Welcome " + jObj.getString("fullname"),Toast.LENGTH_LONG).show();
                Session obj = new Session();
                obj.setEmailid(jObj.getString("emailid"));

            }else{
                Toast.makeText(c,"Invalid Credentials !",Toast.LENGTH_LONG).show();
            }
        } catch (JSONException e) {
            e.printStackTrace();
        }
    }

просто посмотрите на Session obj = new Session (); Это должно быть похоже на Session obj = new Session (c); , но здесь написано, что его нельзя применить, c это контекст, в котором я перехожу от основного к асинктической задаче.

Ответы [ 2 ]

0 голосов
/ 16 января 2019

Во-первых, вам нужна статическая переменная для объявления глобальной переменной в классе, как это:

public static Context context;

public Session(Context context){
    this.context= context;
    prefs=context.getSharedPreferences("session_data",Context.MODE_PRIVATE);
}
0 голосов
/ 16 января 2019

Конструктор в Java не может быть абстрактным, окончательным, статическим и Синхронное.

Конструктор инициализирует объект при его создании. Он имеет то же имя, что и его класс, и синтаксически похож на метод. Однако конструкторы не имеют явного возвращаемого типа.

Должно быть

 public Session(Context c){
        this.c = c;
        prefs = c.getSharedPreferences("session_data",Context.MODE_PRIVATE);
    }
...