无法将上下文从onpostexecute传递到sharedpreferences

时间:2019-01-16 09:18:17

标签: java android android-asynctask android-context

我有我的asyctask类和sharedpreferences类。 成功登录后,在AsyncTask> onpostexecute中,我想使用sharedpreferences将值设置为session,因为我必须将上下文传递给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 :(得分:2)

首先,您需要使用静态变量在Class中声明全局变量, 像这样:

public static Context context;

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

答案 1 :(得分:1)

  

Java中的构造函数不能是抽象的,最终的,静态的和   已同步。

构造函数在创建对象时会对其进行初始化。它与类具有相同的名称,并且在语法上类似于方法。但是,构造函数没有显式的返回类型。

应该是

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