package com.nt.iweibo.logic;
import java.io.IOException;
import java.net.MalformedURLException;
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
import java.util.Queue;
import org.json.JSONException;
import org.json.JSONObject;
import weibo4j.Timeline;
import weibo4j.Users;
import weibo4j.model.Emotion;
import weibo4j.model.Paging;
import weibo4j.model.Status;
import weibo4j.model.StatusWapper;
import weibo4j.model.User;
import weibo4j.model.WeiboException;
import android.app.Activity;
import android.app.Service;
import android.content.Context;
import android.content.Intent;
import android.graphics.drawable.Drawable;
import android.os.Handler;
import android.os.IBinder;
import android.os.Message;
import com.nt.iweibo.app.Preferences;
import com.nt.iweibo.bean.Task;
import com.nt.iweibo.bean.UserInfo;
import com.nt.iweibo.services.UserInfoServices;
import com.nt.iweibo.ui.AccessTokenActivity;
import com.nt.iweibo.ui.IWeiboActivity;
import com.nt.iweibo.utils.NetUtil;
public class MainService extends Service implements Runnable {
private static Queue<Task> tasks =new LinkedList<Task>();
//把要更新的activity都放入一个LIST
private static ArrayList<Activity> appActivities = new ArrayList<Activity>();
private IWeiboActivity activity;
private UserInfoServices uServices;
// 当前系统登录用户
public static UserInfo nowUser;//在登录的时候已赋值,服务里,后台运行未关闭可引用
private static Users um;
private UserInfo userInfo;
private static Timeline tm;
//是否运行线程
private boolean isRun;
/**
* activity启动一个任务进来
* @param t
*/
public static void newTask(Task t){
tasks.add(t);
}
/**
* 添加任务到队列中
* @param t
*/
Handler handler =new Handler(){
public void handleMessage(android.os.Message msg) {
switch (msg.what) {
case Task.WEIBO_LOGIN:// 用户登录
//更新UI
activity = (IWeiboActivity) getActivityByName("LoginActivity");
activity.refresh();
break;
case Task.GET_ACCESS_TOKEN:// 获取用户授权信息
activity = (IWeiboActivity) getActivityByName("AccessTokenActivity");
activity.refresh(AccessTokenActivity.GET_TOKEN);
//activity.refresh();
break;
// 获取用户头像和用户名称
case Task.GET_USER_HEAD:
activity = (IWeiboActivity) getActivityByName("AccessTokenActivity");
activity.refresh(AccessTokenActivity.GET_HEAD,msg.obj);
break;
case Task.WEIBO_FRIEDNS_TIMELINE:
activity = (IWeiboActivity) getActivityByName("HomeActivity");
activity.refresh(msg.obj);
break;
/**
* 获得表情库
*/
case Task.WEIBO_EMOTIONS:
{
IWeiboActivity activity = (IWeiboActivity) getActivityByName("AtActivity");
activity.refresh(msg.obj);
break;
}
/**
* 显示某一个的详细信息
*/
case Task.STATUS_SHOW:
{
IWeiboActivity activity = (IWeiboActivity) getActivityByName("WeiboDetailActiivity");
activity.refresh(msg.obj);
break;
}
// 发表微博
case Task.NEW_WEIBO:
{
IWeiboActivity activity = (IWeiboActivity) getActivityByName("NewWeiboActivity");
activity.refresh(msg.obj);
break;
}
//得到用户的详细信息
case Task.TASK_GET_USER_INFO:
IWeiboActivity activity = (IWeiboActivity) getActivityByName("AtActivity");
activity.refresh(msg.obj);
break;
}
}
};
/**
* 根据Activity 的Name 获取Activity实例
* @param name
* @return
*/
private Activity getActivityByName(String name){
if(!appActivities.isEmpty()){
for (Activity activity : appActivities) {
if(null!=activity){
if(activity.getClass().getName().indexOf(name)>0){
return activity;
}
}
}
}
return null;
}
/**
* 添加一个Activivy对象
* @param activity
*/
public static void addActivity(Activity activity){
if(!appActivities.isEmpty())
{
for (Activity at : appActivities)
{
if(at.getClass().getName().equals(activity.getClass().getName()))
{
appActivities.remove(at);
break;
}
}
}
appActivities.add(activity);
}
@Override
public void onCreate() {
super.onCreate();
isRun =true;
Thread thread =new Thread(this);
thread.start();
}
@Override
public void run() {
while (isRun) {
Task task =null;
if(!tasks.isEmpty()){
//检索并删除此队列的头 ,返回的就是移除的对象
task =tasks.poll();//执行完任务后把该任务从任务队列中移除
if(null!=task){
doTask(task);
}
}
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
/**
* 处理任务
*/
private void doTask(Task t){
Message msg =handler.obtainMessage();
msg.what =t.getTaskId();
switch (t.getTaskId()) {
case Task.WEIBO_LOGIN:
System.out.println("doTask>>>>>> user Login!!");
nowUser= (UserInfo) t.getTaskParams().get("user");
um = new Users();
um.client.setToken(nowUser.getToken());
msg.obj="登陆成功";
break;
case Task.GET_ACCESS_TOKEN:// 获取用户授权信息
break;
//获取用户头像和名称
case Task.GET_USER_HEAD:
try
{
userInfo = (UserInfo) t.getTaskParams().get("user");
um = new Users();
um.client.setToken(userInfo.getToken());
User user = um.showUserById(userInfo.getUserId());
System.out.println("=============>>>>>"+user);
Drawable userIcon = NetUtil.getNetImage(user.getProfileImageURL());
userInfo.setUserName(user.getName());
userInfo.setUserIcon(userIcon);
msg.obj = userInfo;
} catch (Exception e)
{
e.printStackTrace();
}
break;
case Task.WEIBO_FRIEDNS_TIMELINE:// 获取用户授权信息
try {
long maxId =(Long) t.getTaskParams().get("maxId");
Paging page = new Paging();
if(maxId <= 0)
page.setPage(1);
else
{
page.setMaxId(maxId);
}
page.setCount(Preferences.PAGE_SIZE);
tm = new Timeline();
tm.client.setToken(nowUser.getToken());
StatusWapper statusWapper = tm.getFriendsTimeline(0, 0, page);
List<Status> status=statusWapper.getStatuses();
msg.obj = status;
} catch (WeiboException e) {
e.printStackTrace();
}
break;
//获取表情
case Task.WEIBO_EMOTIONS:
tm = new Timeline();
tm.client.setToken(nowUser.getToken());
try
{
List<Emotion> emotions = tm.getEmotions("face","cnname");
msg.obj = emotions;
} catch (WeiboException e)
{
e.printStackTrace();
}
break;
// 获取单条微博信息
case Task.STATUS_SHOW:
{
tm = new Timeline();
tm.client.setToken(nowUser.getToken());
long id=(Long) t.getTaskParams().get("status_id");
String status_id=String.valueOf(id);
try
{
msg.obj=tm.showStatus(status_id);
} catch (WeiboException e)
{
e.printStackTrace();
}
break;
}
// 发表微博
case Task.NEW_WEIBO:
{
tm = new Timeline();
tm.client.setToken(nowUser.getToken());
String status = (String) t.getTaskParams().get("status");
try
{
Status s =tm.UpdateStatus(status);
System.out.println(s);
msg.obj = true;
}
catch (WeiboException e)
{
e.printStackTrace();
msg.obj = false;
}
break;
}
//3.获得用户信息
case Task.TASK_GET_USER_INFO:
um = new Users();
um.client.setToken(nowUser.getToken());
User user=null;
try {
user = um.showUserById(String.valueOf(nowUser.getUserId()));
} catch (WeiboException e) {
e.printStackTrace();
}
msg.obj = user;
break;
}
handler.sendMessage(msg);
}
@Override
public IBinder onBind(Intent intent) {
// TODO Auto-generated method stub
return null;
}
/**
* 退出系统
* @param context
*/
public static void appExit(Context context)
{
//Finish 所有的Activity
for (Activity activity : appActivities)
{
if(!activity.isFinishing())
activity.finish();
}
// 结束 Service
Intent service = new Intent("com.nt.iweibo.logic.MainService");
context.stopService(service);
}
}
login
<pre name="code" class="java">package com.nt.iweibo.ui;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import android.app.Activity;
import android.app.Dialog;
import android.app.ProgressDialog;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;
import com.nt.iweibo.R;
import com.nt.iweibo.adapter.UserInfoAdapter;
import com.nt.iweibo.bean.Task;
import com.nt.iweibo.bean.UserInfo;
import com.nt.iweibo.logic.MainService;
import com.nt.iweibo.services.UserInfoServices;
import com.nt.iweibo.utils.SharedPreferencesUtil;
import com.oauthTest.sns.Sina;
import com.oauthTest.utils.ConfigUtil;
public class LoginActivity extends Activity implements IWeiboActivity{
private Button btnLogin;
private UserInfoServices services;
private List<UserInfo> users;
private UserInfo nowUser;
private Button btn_user_selecte;
private Button btn_add_account;
private ImageView imge_user_head;
private TextView txt_login_show_name;
private ProgressDialog progressDialog;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.login);
//启动服务
Intent intent =new Intent(this,MainService.class);
startService(intent);
services = new UserInfoServices(this);
// 把自己添加到Activity集合里面
MainService.addActivity(this);
init();
nowUser=SharedPreferencesUtil.getLoginUser(this);
if(null != nowUser)
{
//System.out.println("nowUser.getToken()===>>>>"+nowUser.getToken());
txt_login_show_name.setText(nowUser.getUserName());
nowUser = services.getUserInfoByUserId(nowUser.getUserId());
imge_user_head.setImageDrawable(nowUser.getUserIcon());
showDialg();
newTask();
}
//把自己放进去appActivites集合里面
MainService.addActivity(this);
}
@Override
public void init() {
users = services.findAllUsers();
if(null==users || users.isEmpty())
{
Intent intent = new Intent(this, AuthActivity.class);
startActivity(intent);
finish();
}
initView();
}
private void initView(){
imge_user_head = (ImageView) this.findViewById(R.id.imge_user_head);
txt_login_show_name = (TextView) this.findViewById(R.id.txt_login_show_name);
btn_user_selecte = (Button) this.findViewById(R.id.btn_user_selected);
btn_user_selecte.setOnClickListener(new UserSelectedOnClickListener());
btnLogin=(Button) findViewById(R.id.btn_login);
btn_add_account = (Button) this.findViewById(R.id.btn_add_account);
btn_add_account.setOnClickListener(new OnClickListener()
{
public void onClick(View v)
{
ConfigUtil.oauthInter = new Sina();
Intent intent = new Intent(LoginActivity.this, WebViewActivity.class);
startActivity(intent);
}
});
btnLogin.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
if(txt_login_show_name.getText()!=null&&""!=txt_login_show_name.getText()){
///打开进度框
showDialg();
// 保存登录用户信息
SharedPreferencesUtil.saveLoginUser(LoginActivity.this,nowUser);
//发送登录任务给系统
newTask();
}else{
Toast.makeText(LoginActivity.this,R.string.select_user, 0).show();
}
}
});
}
@Override
public void refresh(Object... params) {
if(null != progressDialog)
progressDialog.dismiss();
jump();
}
private void jump()
{
//跳转
Intent intent = new Intent(this, MainActivity.class);
startActivity(intent);
this.finish();
}
private void newTask()
{
Map<String, Object> taskParams = new HashMap<String, Object>();
taskParams.put("user", nowUser);
Task task = new Task(Task.WEIBO_LOGIN, taskParams);
MainService.newTask(task);
}
private void showDialg()
{
if(null == progressDialog)
{
progressDialog = new ProgressDialog(this);
}
progressDialog.setMessage("正在登录...");
progressDialog.show();
}
final class UserSelectedOnClickListener implements OnClickListener
{
public void onClick(View v)
{
View viewDlg = View.inflate(LoginActivity.this, R.layout.user_selected_dialog, null);
final Dialog dialog = new Dialog(LoginActivity.this, R.style.user_selected_dialog);
dialog.setContentView(viewDlg);
dialog.show();
ListView listView = (ListView) viewDlg.findViewById(R.id.lv_user_list);
UserInfoAdapter adapter = new UserInfoAdapter(LoginActivity.this, users);
listView.setAdapter(adapter);
listView.setOnItemClickListener(new OnItemClickListener()
{
public void onItemClick(AdapterView<?> arg0, View view, int arg2,
long id)
{
ImageView imagUserHead=(ImageView) view.findViewById(R.id.img_user_head_temp);
TextView txtUserName=(TextView) view.findViewById(R.id.txt_show_name);
imge_user_head.setImageDrawable(imagUserHead.getDrawable());
txt_login_show_name.setText(txtUserName.getText());
nowUser = services.getUserInfoByUserId(id+"");
//httpClient.setToken(nowUser.getToken());
System.out.println("nowUser2===>>>"+nowUser);
dialog.dismiss();
}
});
}
}
}
分享到:
相关推荐
软件测试新浪微博测试 软件测试是软件工程中非常重要的一个环节,它旨在确保软件的质量和可靠性。在软件测试中,测试工具起着非常关键的作用,能够帮助测试人员更好地测试软件的功能和性能。本文将介绍软件测试的...
标题“新浪微博登录 sina”指的是关于如何使用新浪开放平台的OAuth协议进行微博登录的教程或代码示例。在互联网开发中,OAuth是一种授权框架,允许第三方应用在用户授权的情况下,访问其存储在另一服务提供者上的...
### 新浪网电子商务模式分析 #### 一、新浪网发展历程及电子商务模式的形成 ##### (一)从技术到门户的转型 新浪网的前身——北京四通利方信息技术有限公司成立于1993年12月18日,由香港利方投资有限公司与北京...
新浪围棋棋谱打谱程序V1.0是一款专为围棋爱好者设计的应用,旨在帮助用户导入并分析围棋棋谱。在围棋的世界里,棋谱是学习和研究棋局的重要工具,它记录了每一步棋的位置和顺序,使得玩家可以复盘、研究高手的对局...
《新浪公共数据集:探索微博世界的用户与信息》 新浪公共数据集,作为一个宝贵的资源,为研究者和数据分析师提供了深入了解社交媒体平台——微博的机会。这个数据集包含了2011年7月21日的微博数据,让我们能够一窥...
浪SHOW是一款由新浪开发的多人视频互动聊天工具。集成同城交友、婚恋交友、财经股票、同龄相约、音乐歌舞、情感驿站、网络教育等频道。新浪SHOW以房间为单位,有共同兴趣爱好的网友可以欢聚一堂,每个房间最多有3个...
【标题】"一键登录新浪博客,专业新浪博客浏览器"揭示了这款软件的主要功能,即提供一个便捷的方式,让用户能够快速地登录新浪博客平台。这通常意味着该软件集成了新浪博客的登录接口,用户只需点击一次按钮,即可...
新浪股票数据接口API是开发者获取实时股票市场信息的重要工具,尤其对于进行数据分析、金融建模或者开发相关应用的人员来说,它提供了丰富的股票数据来源。本文将详细介绍如何使用新浪股票数据接口,以及它能提供的...
微博市场竞争分析报告是对腾讯微博和新浪微博两大微博平台的竞争分析报告。报告对两大平台的用户规模、活跃用户规模、功能设计、用户体验、核心竞争力等方面进行了详细的分析和比较。 一、用户规模分析 报告显示,...
《新浪微博签名apk详解》 在移动应用开发领域,尤其是在Android和iOS平台上,应用的签名是保障应用程序安全性和完整性的关键步骤。本篇文章将详细解析“新浪微博签名apk”这一工具,帮助开发者更好地理解和使用它。...
在IT行业中,构建网站是常见的任务之一,而模拟知名网站如新浪首页的布局和功能,是提升前端开发技能的有效方式。本项目名为“仿新浪首页、主题、详情页,纯html静态页面”,其核心目标是利用HTML这一基础的网页标记...
本示例主要关注如何通过编程方式从新浪财经获取股票数据。新浪作为国内知名的财经信息提供平台,提供了丰富的股票API接口供开发者使用。下面我们将深入探讨这个小例子中的关键知识点。 首先,我们需要了解新浪股票...
本文将深入探讨如何使用Java语言从新浪获取股票信息,包括理解数据格式、解析数据以及利用这些信息进行进一步的处理或展示。 ### 一、理解新浪股票API 新浪财经提供了免费的股票数据接口,可以用来获取股票的实时...
《jQuery高仿新浪微博图片显示插件深度解析》 在网页设计和开发中,图片的展示方式对于用户体验至关重要。尤其在社交媒体平台,如新浪微博,图片的加载速度和展示效果直接影响到用户的浏览体验。为了满足此类需求,...
【阿里天池算法_新浪微博互动预测-挑战baseline,天池新浪微博预测】 阿里巴巴的天池平台是全球领先的数据科学竞赛平台,旨在推动数据科学的发展和应用。在这个平台上,开发者和数据科学家可以通过解决实际业务问题...
在Python编程环境下,新浪、网易和腾讯等网站提供了API接口,使得开发者能够便捷地获取到股票的Tick数据。Tick数据是指股票市场中每一笔交易的最详细数据,包括价格、成交量、时间戳等信息,对于短线交易者和高频...
《安卓新浪微博客户端:2013.10.23版本的回顾与解析》 在移动互联网快速发展的年代,微博作为社交媒体的重要平台,其客户端在各个操作系统上的表现备受关注。本文将聚焦于2013年10月23日的安卓版新浪微博客户端,...
在Android平台上,实现新浪微博分享是一项常见的社交功能,它允许用户将内容快速地推送到自己的微博账号,以便与好友们分享信息、图片或者链接。本文将详细介绍如何在Android应用中集成新浪微博分享功能,包括授权...
新浪微博类应用涉及到大量的用户数据存储和检索,XWeibo可能会使用MySQL或其他关系型数据库系统,进行用户注册、登录、发布动态等操作。这需要开发者熟悉SQL语言,以及PHP与数据库的交互方式,如PDO或mysqli扩展。 ...
在当今互联网时代,社交网络平台的登录接口已经成为许多网站和应用的常见功能,其中新浪微博凭借其庞大的用户基础,为开发者提供了丰富的API接口,使得用户可以通过自己的微博账号快速登录第三方网站。本篇文章将...