package com.shaweibo.biu.dao.login; import android.content.Context; import android.content.SharedPreferences; import com.shaweibo.biu.dao.UrlConstants; import com.shaweibo.biu.dao.HttpClientUtils; import com.shaweibo.biu.dao.post.BasePostDao; import com.shaweibo.biu.dao.relationship.GroupDao; import com.shaweibo.biu.dao.WeiboParameters; import org.json.JSONObject; import java.util.Arrays; import java.util.ArrayList; public class LoginDao { private static final String TAG = LoginDao.class.getSimpleName(); private static Context mContext; private SharedPreferences mPrefs; private String mAccessToken; private String mUid; private long mExpireDate; private ArrayList<String> mNames = new ArrayList<String>(); private ArrayList<String> mTokens = new ArrayList<String>(); private ArrayList<Long> mExpireDates = new ArrayList<Long>(); private static LoginDao mInstance; public static LoginDao getInstance(Context context){ if(mInstance==null){ mContext=context; mInstance =new LoginDao(context); } return mInstance; } private LoginDao(Context context) { mContext = context; mPrefs = context.getSharedPreferences("access_token", Context.MODE_PRIVATE); mAccessToken = mPrefs.getString("access_token", null); mUid = mPrefs.getString("uid", ""); mExpireDate = mPrefs.getLong("expires_in", Long.MIN_VALUE); if (mAccessToken != null) { BasePostDao.setAccessToken(mAccessToken); HttpClientUtils.setAccessToken(mAccessToken); } parseMultiUser(); } public void login(String token, String expire) { mAccessToken = token; BasePostDao.setAccessToken(mAccessToken); HttpClientUtils.setAccessToken(mAccessToken); mExpireDate = System.currentTimeMillis() + Long.valueOf(expire) * 1000; mUid = getUidByToken(); GroupDao groupDao=new GroupDao(mContext); groupDao.getGroups(); groupDao.cache(); } public void logout() { mAccessToken = null; mExpireDate = Long.MIN_VALUE; mPrefs.edit().remove("access_token").remove("expires_in").remove("uid").commit(); } public void cache() { mPrefs.edit().putString("access_token", mAccessToken) .putLong("expires_in", mExpireDate) .putString("uid", mUid) .commit(); } public String getAccessToken() { return mAccessToken; } public String getUid() { return mUid; } public long getExpireDate() { return mExpireDate; } public String[] getUserNames() { return mNames.toArray(new String[mNames.size()]); } private void parseMultiUser() { String str = mPrefs.getString("names", ""); if (str == null || str.trim().equals("")) return; mNames.addAll(Arrays.asList(str.split(","))); str = mPrefs.getString("tokens", ""); if (str == null || str.trim().equals("")) return; mTokens.addAll(Arrays.asList(str.split(","))); str = mPrefs.getString("expires", ""); if (str == null || str.trim().equals("")) return; String[] s = str.split(","); for (int i = 0; i < s.length; i++) { mExpireDates.add(Long.valueOf(s[i])); } if (mTokens.size() != mNames.size() || mTokens.size() != mExpireDates.size() || mExpireDates.size() != mNames.size()) { mNames.clear(); mTokens.clear(); mExpireDates.clear(); } } public static String getUidByToken() { try { String json = HttpClientUtils.doGetRequstWithAceesToken(UrlConstants.GET_UID, new WeiboParameters()); return new JSONObject(json).optString("uid"); } catch (Exception e) { return null; } } }