您现在的位置: 万盛学电脑网 >> 程序编程 >> 网络编程 >> 安卓开发 >> 正文

多账号管理是如何实现的

作者:佚名    责任编辑:admin    更新时间:2022-06-22

这是我们为大家提供的一篇介绍多账号管理是如何实现的文章,接下来就让我们一起来了解一下吧!

列表中的账号是保存在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