我有一个项目,我想将在线用户可用的每个变量保存到共享首选项。这是他们的字符串值user_id,Fname,Lname,以及他们的int值“lexile”,“user_id”。我到目前为止一直在线跟踪教程这么好,但它只提供保存两个变量,所以我即兴创作。我在运行时没有遇到任何错误,但在实际使用应用程序时我似乎无法登录并打开第二个活动,可能是因为我的hashmaping。
以下是代码 这是相关登录的一部分
Response.Listener<String> responseListener = new Response.Listener<String>() {
@Override
public void onResponse(String response) {
//SUBUKAN NA ISINGIT DINE ANG PAGCHECK SA INTERNET SERCVICE
try {
JSONObject jsonResponse = new JSONObject(response);
boolean success = jsonResponse.getBoolean("success");
//OPENS THE NEW ACTIVITY
if (success) {
String Fname = jsonResponse.getString("Fname");
String Lname = jsonResponse.getString("Lname");
int lexile = jsonResponse.getInt("lexile");
int user_id = jsonResponse.getInt("user_id");
// String username = jsonResponse.getString("username");
// int user_id = jsonResponse.getInt("user_id");
Intent intent = new Intent(Login.this, User_nav.class);
intent.putExtra("Lname", Lname);
intent.putExtra("Fname", Fname);
intent.putExtra("lexile", lexile);
intent.putExtra("user_id", user_id);
// intent.putExtra("username",username);
//intent.putExtra("user_id", user_id);
//THIS IS THE PART OF THE SESSION MANAGER
session.createLoginSession(Lname, Fname, lexile, user_id);
Login.this.startActivity(intent);
progress.dismiss();
}
这是第二项活动,即相关的代码
SessionManager session;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_user);
session = new SessionManager(getApplicationContext());
Toast.makeText(getApplicationContext(), "User Login Status: " + session.isLoggedIn(),Toast.LENGTH_LONG).show();
session.checkLogin();
HashMap<String, String> user = session.getUserDetails();
String Lname = user.get(SessionManager.KEY_FNAME);
String Fname = user.get(SessionManager.KEY_LNAME);
HashMap<String, Integer> user_int = session.getUserLexileNID();
Integer lexile = user_int.get(SessionManager.KEY_LEXILE);
Integer user_id = user_int.get(SessionManager.KEY_USER_ID);
TextView Name = (TextView) header.findViewById(R.id.Name);
TextView displayLexile = (TextView) header.findViewById(R.id.lexile);
Name.setText(Html.fromHtml(Lname+", " +Fname));
displayLexile.setText("Lexile Level: "+lexile + "" +user_id);
这是SessionManager,它包含所有用于会话制作的代码。
package com.capstone.jmilibraryapp;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.support.v4.content.SharedPreferencesCompat;
import java.util.HashMap;
public class SessionManager {
SharedPreferences pref;
SharedPreferences.Editor editor;
Context _context;
int PRIVATE_MODE = 0;
private static final String PREF_NAME = "JMIPref";
private static final String IS_LOGIN = "IsLoggedIn";
public static final String KEY_FNAME = "Fname";
public static final String KEY_LNAME = "Lname";
public static final String KEY_USER_ID = "user_id";//PART OF THE PROBLEM
public static final String KEY_LEXILE = "lexile";///PART OF THE PROBLEM
//constructor
public SessionManager(Context context){
this._context = context;
pref =_context.getSharedPreferences(PREF_NAME, PRIVATE_MODE);
editor = pref.edit();
}
//create login session
public void createLoginSession(String Fname, String Lname, Integer user_id, Integer lexile){
editor.putBoolean(IS_LOGIN, true);
editor.putString(KEY_FNAME, Fname);
editor.putString(KEY_LNAME, Lname);
editor.putInt(KEY_USER_ID, user_id);
editor.putInt(KEY_LEXILE, lexile);
editor.commit();
}
//Part of the tutorial dont seem to have any problem
public HashMap<String, String> getUserDetails(){
HashMap<String, String> user = new HashMap<String, String>();
user.put(KEY_FNAME, pref.getString(KEY_FNAME, null));
user.put(KEY_LNAME, pref.getString(KEY_LNAME, null));
return user;
}
//THIS MAYBE THE SOURCE OF THE PROBLEM
public HashMap<String, Integer> getUserLexileNID(){
HashMap<String, Integer> user_int = new HashMap<>();
user_int.put(KEY_LEXILE, pref.getInt(KEY_LEXILE,-1 ));
user_int.put(KEY_USER_ID, pref.getInt(KEY_USER_ID,-1 ));
return user_int;
}
public void checkLogin(){
if (!this.isLoggedIn()) {
Intent i = new Intent(_context, Login.class);
i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
_context.startActivity(i);
}}
public void logoutUser(){
editor.clear();
editor.commit();
Intent i = new Intent(_context, Login.class);
i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
_context.startActivity(i);
}
public boolean isLoggedIn(){
return pref.getBoolean(IS_LOGIN, false);
}
}