package com.itap.voiceemoticon.weibo; import java.util.ArrayList; import org.json.JSONArray; import org.tadpoleframework.common.JSONUtil; import org.tadpoleframework.common.StringUtil; import android.content.Context; import android.content.SharedPreferences; import android.content.SharedPreferences.Editor; import com.weibo.sdk.android.Oauth2AccessToken; /** * 该类用于保存Oauth2AccessToken到sharepreference,并提供读取功能 * * @author xiaowei6@staff.sina.com.cn */ public class WeiboLoginAcountManager { private static final String PREFERENCES_NAME = "com_weibo_sdk_android"; public static final String KEY_LOGIN_ACOUNTS = "loginAcounts"; private static Context sContext; private static WeiboLoginAcountManager mMgr = null; public WeiboLoginAcountManager() { } public static WeiboLoginAcountManager getInstance() { if (null == mMgr) { mMgr = new WeiboLoginAcountManager(); } return mMgr; } public static void init(Context context) { sContext = context.getApplicationContext(); } public boolean isLogin() { Oauth2AccessToken token = getLastLoginAccessToken(); if (token == null) { return false; } return token.isSessionValid(); } public void logout() { WeiboLoginAccount loginAccount = getLastLoginAccount(); if (null != loginAccount) { delete(loginAccount); } } /** * 从SharedPreferences读取accessstoken * * @param context * @return Oauth2AccessToken */ public Oauth2AccessToken getLastLoginAccessToken() { Oauth2AccessToken token = null; ArrayList<WeiboLoginAccount> list = getLoginAccountList(); for (WeiboLoginAccount item : list) { if (item.lastLogin) { token = new Oauth2AccessToken(); token.setExpiresTime(item.expiresTime); token.setToken(item.token); break; } } return token; } public WeiboLoginAccount getLastLoginAccount() { ArrayList<WeiboLoginAccount> list = getLoginAccountList(); for (WeiboLoginAccount item : list) { if (item.lastLogin) { return item; } } return null; } public void delete(WeiboLoginAccount loginAccount) { if (null == loginAccount) { return; } ArrayList<WeiboLoginAccount> list = getLoginAccountList(); WeiboLoginAccount itemToDel = null; for (WeiboLoginAccount item : list) { if (null != item && item.uid == loginAccount.uid) { itemToDel = item; break; } } if (null != itemToDel) { list.remove(itemToDel); } saveLoginAccountList(list); return; } public void addOrUpdateLoginAcount(WeiboLoginAccount loginAccount) { if (null == loginAccount) { return; } loginAccount.lastLogin = true; if (0L == loginAccount.createAt) { loginAccount.createAt = System.currentTimeMillis(); } ArrayList<WeiboLoginAccount> list = getLoginAccountList(); boolean isUpdated = false; for (WeiboLoginAccount item : list) { if (item.uid == loginAccount.uid) { item.lastLogin = loginAccount.lastLogin; item.expiresTime = loginAccount.expiresTime; item.token = loginAccount.token; item.lastLogin = loginAccount.lastLogin; isUpdated = true; } else { item.lastLogin = false; } } if (!isUpdated) { list.add(loginAccount); } saveLoginAccountList(list); } private String readString(String key) { SharedPreferences pref = sContext.getSharedPreferences( PREFERENCES_NAME, Context.MODE_APPEND); return pref.getString(key, ""); } private void writeString(String key, String value) { SharedPreferences pref = sContext.getSharedPreferences( PREFERENCES_NAME, Context.MODE_APPEND); Editor editor = pref.edit(); editor.putString(key, value); // editor.putString("token", token.getToken()); // editor.putLong("expiresTime", token.getExpiresTime()); editor.commit(); } public void saveLoginAccountList(ArrayList<WeiboLoginAccount> list) { JSONArray jsonArr = JSONUtil.convertToJSONArray(list, WeiboLoginAccount.class); writeString(KEY_LOGIN_ACOUNTS, jsonArr.toString()); } public ArrayList<WeiboLoginAccount> getLoginAccountList() { ArrayList<WeiboLoginAccount> list = new ArrayList<WeiboLoginAccount>(); String loginAccountsJsonStr = readString(KEY_LOGIN_ACOUNTS); System.out.println("loginAccountsJsonStr = " + loginAccountsJsonStr); if (StringUtil.isBlank(loginAccountsJsonStr)) { return list; } list = JSONUtil.convertToList(loginAccountsJsonStr, WeiboLoginAccount.class); return list; } }