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();
}
});
}
}
}