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