我有我的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这是我从维护转向异步任务的上下文。
答案 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);
}