这是我们为大家提供的一篇介绍多账号管理是如何实现的文章,接下来就让我们一起来了解一下吧!
列表中的账号是保存在sqlite数据库中的,下方的大图片是显示你选择的默认账号,双击图片就会显示此账号的主页
点击添加账号,将会跳向腾讯的授权页面,这个页面我是放在WebView中的,当授权成功后,腾讯的API将会返回给我们一个验证码,然后返回到我们的账号管理界面。
Java代码
public class AccountActivity extends ListActivity implements OnItemClickListener,OnItemLongClickListener,OnClickListener{
private final static String TAG="AccountActivity";
private DataHelper dataHelper;
private MyWeiboSync weibo;
private List userList;
private ListView listView;
private ImageView user_default_headicon;
private LinearLayout account_add_btn_bar;
private UserInfo currentUser;
private UserAdapater adapater;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.account);
setUpViews();//设置view
setUpListeners();//设置listenter
registerReceiver(broadcastReceiver, new IntentFilter("com.weibo.caigang.getverifier"));//注册拿到验证码广播接收器.
dataHelper = DataBaseContext.getInstance(getApplicationContext());//获取数据库连接类,用了单例,保证全局只有一个此对象。
userList = dataHelper.GetUserList(false);
SharedPreferences preferences = getSharedPreferences("default_user",Activity.MODE_PRIVATE);
String nick = preferences.getString("user_default_nick", "");//取得微博默认登录账号信息
UserInfo user = null;
if(userList!=null&&userList.size()>0){
if (nick != "") {
user = dataHelper.getUserByName(nick,userList);//取得微博默认登录账号信息
}
if(user == null) {
user = userList.get(0);
}
}
if(user!=null){
user_default_headicon.setImageDrawable(user.getUserIcon());
}
if(userList!=null&&userList.size()>0){
adapater = new UserAdapater();
listView.setAdapter(adapater);
listView.setOnItemClickListener(this);
}
}
private void setUpViews(){
listView = getListView();
user_default_headicon = (ImageView)findViewById(R.id.user_default_headicon);
account_add_btn_bar = (LinearLayout)findViewById(R.id.account_add_btn_bar);
}
private void setUpListeners(){
user_default_headicon.setOnClickListener(this);
account_add_btn_bar.setOnClickListener(this);
listView.setOnItemLongClickListener(this);
}
public class UserAdapater extends BaseAdapter{
@Override
public int getCount() {
return userList.size();
}
@Override
public Object getItem(int position) {
return userList.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
convertView = LayoutInflater.from(getApplicationContext()).inflate(R.layout.account_list_item, null);
ImageView user_headicon = (ImageView) convertView.findViewById(R.id.user_headicon);
TextView user_nick = (TextView) convertView.findViewById(R.id.user_nick);
TextView user_name = (TextView) convertView.findViewById(R.id.user_name);
UserInfo user = userList.get(position);
try {
user_headicon.setImageDrawable(user.getUserIcon());
user_nick.setText(user.getUserName());
user_name.setText("@"+user.getUserId());
} catch (Exception e) {
e.printStackTrace();
}
return convertView;
}
}
@Override
public void onItemClick(AdapterView arg0, View arg1, int position, long arg3) {
currentUser = userList.get(position);
user_default_headicon.setImageDrawable(currentUser.getUserIcon());
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.account_add_btn_bar: {
weibo = WeiboContext.getInstance();//单例,保证整个应用只有一个weibo对象
weibo.getRequestToken();
Intent intent = new Intent(AccountActivity.this,AuthorizeActivity.class);
Bundle bundle = new Bundle();
bundle.putString("url", weibo.getAuthorizeUrl());
intent.putExtras(bundle);
startActivity(intent);//跳转到腾讯的微博授权页面,使用webview来显示
}
break;
case R.id.user_default_headicon: {
SharedPreferences preferences = getSharedPreferences("default_user", Activity.MODE_PRIVATE);
SharedPreferences.Editor editor = preferences.edit();
editor.putString("user_default_nick", currentUser.getUserName());
editor.putString("user_default_name", currentUser.getUserId());
editor.commit();
Intent intent = new Intent(AccountActivity.this, MainActivity.class);
startActivity(intent);
}
break;
default:
break;
}
}
BroadcastReceiver broadcastReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
if(intent.getAction().equals("com.weibo.caigang.getverifier")){
weibo = WeiboContext.getInstance();
Bundle bundle = intent.getExtras();
String veryfier = bundle.getString("veryfier");//获取从授权页面返回的veryfier
if(veryfier!=null){
//unregisterReceiver(broadcastReceiver);
weibo.getAccessToken(weibo.getTokenKey(), weibo.getTokenSecrect(), veryfier);//取得key和secret,这个key和secret非常重要,调腾讯的API全靠它了,神马新浪的,人人网的都一样的,不过还是有点区别,腾讯的OAuth认证是基于1.0的
String userInfo = weibo.getUserInfo(weibo.getAccessTokenKey(), weibo.getAccessTokenSecrect());
try {
JSONObject data = new JSONObject(userInfo).getJSONObject("data");
String headUrl = null;
if(data.getString("head")!=null&&!"".equals(data.getString("head"))){
headUrl = data.getString("head")+"/100";
}
String userId = data.getString("name");
String userName = data.getString("nick");
UserInfo user = new UserInfo();//生成一个user对象保存到数据库
user.setUserId(userId);
user.setUserName(userName);
user.setToken(weibo.getAccessTokenKey());
user.setTokenSecret(weibo.getAccessTokenSecrect());
Long insertId = 0L;
if (dataHelper.HaveUserInfo(userId)){//数据库已经存在了次用户
dataHelper.UpdateUserInfo(userName, ImageUtil.getRoundBitmapFromUrl(headUrl, 15), userId);
//Toast.makeText(AccountActivity.this, "此用户已存在,如果你用户名或者头像已经改变,那么此操作将同步更新!", Toast.LENGTH_LONG).show();
}else{
if(headUrl!=null){
insertId = dataHelper.SaveUserInfo(user,ImageUtil.getBytesFromUrl(headUrl));
}else{
insertId = dataHelpe