在好例子网,分享、交流、成长!
您当前所在位置:首页Java 开发实例Android平台开发 → <赞>一起聊天app源码(android环信)

<赞>一起聊天app源码(android环信)

Android平台开发

下载此实例
  • 开发语言:Java
  • 实例大小:25.03M
  • 下载次数:211
  • 浏览次数:1332
  • 发布时间:2015-09-17
  • 实例类别:Android平台开发
  • 发 布 人:crazycode
  • 文件格式:.rar
  • 所需积分:2
 相关标签: Android 聊天 源码

实例介绍

【实例简介】代码写的很规整,值得一读

【实例截图】

【核心代码】

登陆代码:


package com.luobo.app.fx;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;

import android.app.Activity;
import android.app.ProgressDialog;
import android.content.Intent;
import android.content.SharedPreferences;
import android.content.SharedPreferences.Editor;
import android.os.Bundle;
import android.util.Log;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.Toast;

import com.easemob.EMCallBack;
import com.easemob.chat.EMChatManager;
import com.easemob.chat.EMContactManager;
import com.easemob.chat.EMGroupManager;
import com.easemob.exceptions.EaseMobException;
import com.loopj.android.http.RequestParams;
import com.luobo.app.DemoApplication;
import com.luobo.app.R;
import com.luobo.app.Service.Ipml.IUserServiceIpml;
import com.luobo.app.activity.BaseActivity;
import com.luobo.app.bean.FriendBean;
import com.luobo.app.bean.FriendsBean;
import com.luobo.app.bean.Users;
import com.luobo.app.bean.Usersbean;
import com.luobo.app.config.Constant;
import com.luobo.app.config.HttpPathConfig;
import com.luobo.app.db.UserDao;
import com.luobo.app.domain.User;
import com.luobo.app.fx.other.LocalUserInfo;
import com.luobo.app.https.HttpTools;
import com.luobo.app.interfaces.ResultCallback;
import com.luobo.app.tools.GsonTools;

public class LoginActivity extends BaseActivity implements OnClickListener {

	private Button btn_login, btn_register;
	private EditText et_username, et_password;
	private ProgressDialog progressDialog;
	private SharedPreferences preferences;
	private ImageView top_left;
	private Editor editor;
	private String saveName;
	private String savePassword;
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_login);
		preferences = getSharedPreferences("SaveInfo", MODE_PRIVATE);
		editor = preferences.edit();
		initView();
	}

	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		// Inflate the menu; this adds items to the action bar if it is present.
		getMenuInflater().inflate(R.menu.login, menu);
		return true;
	}

	public void initView() {
		// TODO Auto-generated method stub
		// super.initView();
		saveName = preferences.getString("lastName", "");
		savePassword = preferences.getString("lastPassword", "");
		Log.e("preferences保存的信息", saveName   savePassword);
		et_password = (EditText) this.findViewById(R.id.login_password);
		et_username = (EditText) this.findViewById(R.id.login_username);
		et_username.setText(saveName);
		et_password.setText(savePassword);
		btn_login = (Button) this.findViewById(R.id.login_login);
		btn_login.setOnClickListener(this);
		btn_register = (Button) findViewById(R.id.register_btn);
		btn_register.setOnClickListener(this);
		progressDialog = new ProgressDialog(LoginActivity.this);
		top_left=(ImageView) this.findViewById(R.id.top_left);
		top_left.setOnClickListener(this);
	}

	@Override
	public void onClick(View v) {
		// TODO Auto-generated method stub
		switch (v.getId()) {
		case R.id.login_login:
			login();
			break;
		case R.id.register_btn:
			register();
			break;
		case R.id.top_left:
			LoginActivity.this.finish();
			break;
		default:
			break;
		}
	}

	private void register() {
		startActivityForResult(new Intent(LoginActivity.this,
				RegisterActivity.class), 2);
	}

	private void login() {
		// TODO Auto-generated method stub
		progressDialog.setMessage("正在登陆...");
		progressDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);
		progressDialog.show();
		final String password = et_password.getText().toString().trim();
		final String username = et_username.getText().toString().trim();
		RequestParams params = new RequestParams();
		params.put("username", username);
		params.put("password", password);
		HttpTools.HttpPost(HttpPathConfig.HTTP_LOGIN, params,
				new ResultCallback() {

					@Override
					public void getResult(String result) {
						// TODO Auto-generated method stub
						if (!result.equals("1")) {
							Log.e("------>", result);
							Usersbean usersbean = GsonTools.getBean(result,Usersbean.class);
							if (usersbean != null) {
								switch (usersbean.getCode()) {
								case 0:
									if (usersbean.getUsers() != null) {
										usersbean.getUsers()
												.setUserPwd(password);
										editor.putString("lastName", username);
										editor.putString("lastPassword",
												password);
										HxLogin(usersbean.getUsers());
									} else {
										Toast.makeText(LoginActivity.this,
												"服务器内部,出错请稍后尝试!!",
												Toast.LENGTH_SHORT).show();
									}

									break;
								default:
									progressDialog.dismiss();
									Toast.makeText(LoginActivity.this,
											usersbean.getMsg(),
											Toast.LENGTH_SHORT).show();
									break;
								}
							} else {
								Toast.makeText(LoginActivity.this,
										"服务器繁忙,请重新尝试!2", Toast.LENGTH_SHORT)
										.show();
							}
						} else {
							Toast.makeText(LoginActivity.this, "服务器繁忙,请重新尝试!1",
									Toast.LENGTH_SHORT).show();
						}
					}

				}, LoginActivity.this);
	}

	/**
	 * 登陆环信服务器
	 * 
	 * @param user
	 */
	private void HxLogin(final Users user) {
		// TODO Auto-generated method stub
		try {
			final String nick = user.getUserNickname();
			final String hxid = String.valueOf(user.getHxId());
			final String password = user.getUserPwd();
			EMChatManager.getInstance().login(hxid, password, new EMCallBack() {
				@Override
				public void onError(int arg0, String arg1) {
					// TODO Auto-generated method stub
					progressDialog.dismiss();
				}

				@Override
				public void onProgress(int arg0, String arg1) {
					// TODO Auto-generated method stub
				}

				@Override
				public void onSuccess() {
					// TODO Auto-generated method stub
					Log.e("消息", "eng");
					progressDialog.dismiss();
					// 登陆成功,保存用户名密码

					DemoApplication.getInstance().setUserName(hxid);
					DemoApplication.getInstance().setPassword(password);
					runOnUiThread(new Runnable() {

						@Override
						public void run() {
							// TODO Auto-generated method stub
							progressDialog.setMessage("获取好友列表....");
						}
					});
					try {
						boolean updatenick = EMChatManager.getInstance()
								.updateCurrentUserNick(nick);
						if (!updatenick) {
							Log.e("消息", "更新当前昵称失败");
						}
						EMGroupManager.getInstance().loadAllGroups();
						EMChatManager.getInstance().loadAllConversations();
						runOnUiThread(new Runnable() {

							@Override
							public void run() {
								// TODO Auto-generated method stub
								progressContactsAndGroup(user);
							}
						});
					} catch (Exception e) {
						// TODO: handle exception
						runOnUiThread(new Runnable() {

							@Override
							public void run() {
								// TODO Auto-generated method stub
								progressDialog.dismiss();
								DemoApplication.getInstance().logout(null);
								Toast.makeText(LoginActivity.this,
										"登陆失败:获取好友或群组失败", Toast.LENGTH_SHORT)
										.show();
							}
						});
						return;
					}
				}

			});
		} catch (Exception e) {
			// TODO: handle exception
		}
	}

	private void progressContactsAndGroup(final Users user) {

		try {
			// List<String> usernames = EMChatManager.getInstance()
			// .getContactUserNames();
			String usernames = user.getUserName();
			Log.e("usernames", usernames.toString()   "----");
			if (!usernames.equals("") || usernames != null) {
				// String totaluser = usernames.get(0);
				// for (int i = 1; i < usernames.size(); i  ) {
				// final String split = "66split88";
				// totaluser  = split   usernames.get(i);
				// }
				// totaluser = totaluser
				// .replace(Constant.NEW_FRIENDS_USERNAME, "");
				// totaluser = totaluser.replace(Constant.GROUP_USERNAME, "");
				// Log.e("totaluser---->>>>>", totaluser);
				RequestParams params = new RequestParams();
				params.put("usertoken", user.getUserToken());
				params.put("username", user.getUserName());
				params.put("password", user.getUserPwd());
				HttpTools.HttpPost(HttpPathConfig.HTTP_GETALLFRIENDS, params,
						new ResultCallback() {
							@Override
							public void getResult(String result) {
								// TODO Auto-generated method stub
								Log.e("---friends", result);
								FriendsBean friendsBean = GsonTools.getBean(
										result, FriendsBean.class);
								if (friendsBean != null) {
									if (friendsBean.getFriends().size() > 0) {
										if (friendsBean.getCode() == 0) {
											IUserServiceIpml ipml = new IUserServiceIpml(
													LoginActivity.this);
											ipml.saveMyInfo(user);
											setFriends(friendsBean.getFriends());
//											setFriends(ipml
//													.saveFriends(friendsBean
//															.getFriends()));

										} else {
											progressDialog.dismiss();
											Toast.makeText(LoginActivity.this,
													"获取好友列表失败1,请重试...",
													Toast.LENGTH_SHORT).show();
										}
									} else {
										progressDialog.dismiss();
										Toast.makeText(LoginActivity.this,
												"获取好友列表失败,请重试2...",
												Toast.LENGTH_SHORT).show();
									}
								} else {
									progressDialog.dismiss();
									Toast.makeText(LoginActivity.this,
											"获取数据错误!", Toast.LENGTH_SHORT)
											.show();
								}
							}
						}, LoginActivity.this);
			} else {
				IUserServiceIpml ipml = new IUserServiceIpml(LoginActivity.this);
				ipml.saveMyInfo(user);
				ipml.saveFriends(null);
			}
		} catch (Exception e) {
			// TODO: handle exception
		}
	}

	private void setFriends(List<FriendBean> listusers) {
		Log.e("list----->", listusers.toString());
		 Map<String, User> map = new HashMap<String, User>();
		 for(int i=0;i<listusers.size();i  ){
			 FriendBean users=listusers.get(i);
			 String hxid = users.getHxid();
             String fxid = users.getFxid();
             String nick = users.getNickname();
             String avatar = users.getUserimage();
             String sex = users.getSex();
             String tel = users.getUsername();
			 User user=new User();
			 user.setFxid(fxid);
             user.setUsername(hxid);
             user.setBeizhu("");
             user.setNick(nick);
             user.setSex(sex);
             user.setTel(tel);
             user.setAvatar(avatar);
			 map.put(hxid,user);
		 }
		
		// 添加user"申请与通知"
		User newFriends = new User();
		newFriends.setUsername(Constant.NEW_FRIENDS_USERNAME);
		String strChat = "申请与通知";
		newFriends.setNick(strChat);
		newFriends.setBeizhu("");
		newFriends.setFxid("");
		newFriends.setHeader("");
		newFriends.setRegion("");
		newFriends.setSex("");
		newFriends.setTel("");
		newFriends.setSign("");
		newFriends.setAvatar("");
		map.put(Constant.NEW_FRIENDS_USERNAME, newFriends);
		// 添加"群聊"
		User groupUser = new User();
		String strGroup = "群聊";
		groupUser.setUsername(Constant.GROUP_USERNAME);
		groupUser.setNick(strGroup);
		groupUser.setHeader("");
		groupUser.setNick(strChat);
		groupUser.setBeizhu("");
		groupUser.setFxid("");
		groupUser.setHeader("");
		groupUser.setRegion("");
		groupUser.setSex("");
		groupUser.setTel("");
		groupUser.setSign("");
		groupUser.setAvatar("");
		map.put(Constant.GROUP_USERNAME, groupUser);

		// 存入内存
		DemoApplication.getInstance().setContactList(map);
		// 存入db
		UserDao dao = new UserDao(LoginActivity.this);
		List<User> users = new ArrayList<User>(
				map.values());
		dao.saveContactList(users);

		// 获取黑名单列表

		try {
			List<String> blackList = EMContactManager.getInstance()
					.getBlackListUsernamesFromServer();
			EMContactManager.getInstance().saveBlackList(blackList);

			// 获取群聊列表(群聊里只有groupid和groupname等简单信息,不包含members),sdk会把群组存入到内存和db中
			EMGroupManager.getInstance().getGroupsFromServer();
			addContact("11223354");
			if (!LoginActivity.this.isFinishing())
				progressDialog.dismiss();
			// 进入主页面
			startActivity(new Intent(LoginActivity.this, MainActivity.class));
			finish();
			exitApp();
		} catch (EaseMobException e) {
			// TODO Auto-generated catch block
			progressDialog.dismiss();
			e.printStackTrace();
		}
	}

	public void addContact(final String glufine_id) {
		// 11223354
		if (glufine_id == null || glufine_id.equals("")) {
			return;
		}

		if (DemoApplication.getInstance().getUserName().equals(glufine_id)) {

			return;
		}

		if (DemoApplication.getInstance().getContactList()
				.containsKey(glufine_id)) {

			return;
		}

		new Thread(new Runnable() {
			public void run() {

				try {
					// 在reason封装请求者的昵称/头像/时间等信息,在通知中显示

					String name = LocalUserInfo.getInstance(LoginActivity.this)
							.getUserInfo("nick");
					String avatar = LocalUserInfo.getInstance(
							LoginActivity.this).getUserInfo("avatar");
					long time = System.currentTimeMillis();

					String reason = name   "66split88"   avatar   "66split88"
							  String.valueOf(time)   "66split88"   "加你好友";
					EMContactManager.getInstance().addContact(glufine_id,
							reason);

				} catch (final Exception e) {

				}
			}
		}).start();
	}

	@Override
	protected void onActivityResult(int requestCode, int resultCode, Intent data) {
		// TODO Auto-generated method stub
		super.onActivityResult(requestCode, resultCode, data);
		Log.e("requestCode", requestCode   "---");
		Log.e("resultCode", resultCode   "---");
		if (resultCode == RESULT_OK) {
			Bundle bundle = data.getExtras();
			Log.e("arg1", bundle.getString("username")   "---");
			Log.e("arg1", bundle.getString("password")   "---");
			switch (requestCode) {
			case 2:
				if (bundle.getString("username") != null
						|| !bundle.getString("username").equals("")) {
					et_username.setText(bundle.getString("username"));
				}
				if (bundle.getString("password") != null
						|| !bundle.getString("password").equals("")) {
					et_password.setText(bundle.getString("password"));
				}
				break;

			default:
				break;
			}
		}
	}
	 /** 
     * 退出应用程序的方法,发送退出程序的广播 
     */  
    private void exitApp() {  
        Intent intent = new Intent();  
        intent.setAction("com.app.luobo.exit");  
        this.sendBroadcast(intent);  
    }  
  
    @Override  
    protected void onDestroy() {  
        super.onDestroy();  
       /// System.out.println("-------Close-------->onDestroy()");  
    }  

}




package com.luobo.app.activity;

import com.easemob.chat.EMChatManager;
import com.easemob.chat.EMMessage;
import com.easemob.chat.EMMessage.Type;
import com.easemob.util.EasyUtils;
import com.luobo.app.fx.MainActivity;
import com.luobo.app.utils.CommonUtils;

import android.app.Notification;
import android.app.NotificationManager;
import android.app.PendingIntent;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.os.Bundle;
import android.support.v4.app.FragmentActivity;
import android.support.v4.app.NotificationCompat;
import android.view.View;

public class BaseActivity extends FragmentActivity{

	private static final int notifiId=11;
	protected NotificationManager notificationManager;
	@Override
	protected void onCreate(Bundle arg0) {
		// TODO Auto-generated method stub
		super.onCreate(arg0);
		notificationManager=(NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
	}
	@Override
	protected void onResume() {
		// TODO Auto-generated method stub
		super.onResume();
		EMChatManager.getInstance().activityResumed();
		IntentFilter filter = new IntentFilter();  
        filter.addAction("com.app.luobo.exit");  
        this.registerReceiver(this.finishAppReceiver, filter); 
	}
	@Override
	protected void onStart() {
		// TODO Auto-generated method stub
		super.onStart();
	}
	/**
	 * 返回
	 * @param view
	 */
	public void back(View view){
		finish();
	}
	/**
	 * 当应用在前台的时候。如果当前消息不属于当前回话,在状态栏提示一下
	 * @param message
	 */
	protected void notifyNewMessage(EMMessage message) {
        // 如果是设置了不提醒只显示数目的群组(这个是app里保存这个数据的,demo里不做判断)
        // 以及设置了setShowNotificationInbackgroup:false(设为false后,后台时sdk也发送广播)
        if (!EasyUtils.isAppRunningForeground(this)) {
            return;
        }

        NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(
                this).setSmallIcon(getApplicationInfo().icon)
                .setWhen(System.currentTimeMillis()).setAutoCancel(true);

        String ticker = CommonUtils.getMessageDigest(message, this);
        if (message.getType() == Type.TXT)
            ticker = ticker.replaceAll("\\[.{2,3}\\]", "[表情]");
        // 设置状态栏提示
        mBuilder.setTicker(message.getFrom()   ": "   ticker);

        // 必须设置pendingintent,否则在2.3的机器上会有bug
        Intent intent = new Intent(this, MainActivity.class);
        intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        PendingIntent pendingIntent = PendingIntent.getActivity(this, notifiId,
                intent, PendingIntent.FLAG_ONE_SHOT);
        mBuilder.setContentIntent(pendingIntent);

        Notification notification = mBuilder.build();
        notificationManager.notify(notifiId, notification);
        notificationManager.cancel(notifiId);
    }
	/**
	 * 初始化控件
	 */
	public void initView(){
		
	}
	/**
	 * 初始化数据
	 */
	public void initData(){
		
		
	}
	/**
	 * 获取数据
	 */
	public void getData(){
		
	}
	 /** 
     * 关闭Activity的广播,放在自定义的基类中,让其他的Activity继承这个Activity就行 
     */  
    protected BroadcastReceiver finishAppReceiver = new BroadcastReceiver() {  
        @Override  
        public void onReceive(Context context, Intent intent) {  
            finish();  
        }  
    };  
  
    @Override  
    protected void onDestroy() {   
        super.onDestroy();  
        this.unregisterReceiver(this.finishAppReceiver);  
    }  

}


标签: Android 聊天 源码

实例下载地址

<赞>一起聊天app源码(android环信)

不能下载?内容有错? 点击这里报错 + 投诉 + 提问

好例子网口号:伸出你的我的手 — 分享

网友评论

发表评论

(您的评论需要经过审核才能显示)

查看所有0条评论>>

小贴士

感谢您为本站写下的评论,您的评论对其它用户来说具有重要的参考价值,所以请认真填写。

  • 类似“顶”、“沙发”之类没有营养的文字,对勤劳贡献的楼主来说是令人沮丧的反馈信息。
  • 相信您也不想看到一排文字/表情墙,所以请不要反馈意义不大的重复字符,也请尽量不要纯表情的回复。
  • 提问之前请再仔细看一遍楼主的说明,或许是您遗漏了。
  • 请勿到处挖坑绊人、招贴广告。既占空间让人厌烦,又没人会搭理,于人于己都无利。

关于好例子网

本站旨在为广大IT学习爱好者提供一个非营利性互相学习交流分享平台。本站所有资源都可以被免费获取学习研究。本站资源来自网友分享,对搜索内容的合法性不具有预见性、识别性、控制性,仅供学习研究,请务必在下载后24小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,平台无法对用户传输的作品、信息、内容的权属或合法性、安全性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论平台是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二与二十三条之规定,若资源存在侵权或相关问题请联系本站客服人员,点此联系我们。关于更多版权及免责申明参见 版权及免责申明

;
报警