jzk15666378163 2016-05-12 15:18 采纳率: 0%
浏览 1373

代码有错误,求大神帮忙指导!!!!

public class ContactsFragment extends Fragment implements OnClickListener {

public static String hostIp;

private ExpandableListView userList;

private UserExpandableListAdapter adapter;
private List<String> strGroups; //所有一级菜单名称集合
private List<List<User>> children;

private TextView totalUser;
private Button refreshButton;
private TextView ipTextView;;

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {
    View contactsLayout = inflater.inflate(R.layout.contacts_layout,
            container, false);

// return contactsLayout;

if(!isWifiActive()){    //若wifi没有打开,提示
    Toast.makeText(getActivity(), R.string.no_wifi, Toast.LENGTH_LONG).show();
}


findViews();

strGroups = new ArrayList<String>(); //所有一级菜单名称集合
children = new ArrayList<List<User>>();

// netThreadHelper = NetThreadHelper.newInstance();
BaseFragment.netThreadHelper.connectSocket(); //开始监听数据
BaseFragment.netThreadHelper.noticeOnline(); //广播上线

adapter = new UserExpandableListAdapter(getActivity(), strGroups, children);
userList.setAdapter(adapter);

refreshButton.setOnClickListener(this);
refreshViews();
return contactsLayout;

}

@Override
public void finish() {
// TODO Auto-generated method stub
super.finish();
BaseFragment.netThreadHelper.noticeOffline(); //通知下线
BaseFragment.netThreadHelper.disconnectSocket(); //停止监听

}

public void onViewCreated(View view, Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onViewCreated(view, savedInstanceState);
totalUser =(TextView)view.findViewById(R.id.totalUser);
userList = (ExpandableListView)view.findViewById(R.id.userlist);
refreshButton = (Button) view.findViewById(R.id.refresh);
ipTextView = (TextView) view.findViewById(R.id.mymood);
hostIp = getLocalIpAddress();
ipTextView.setText(hostIp); //设置IP
}

@Override
public void processMessage(Message msg) {
// TODO Auto-generated method stub
switch(msg.what){
case IpMessageConst.IPMSG_BR_ENTRY:
case IpMessageConst.IPMSG_BR_EXIT:
case IpMessageConst.IPMSG_ANSENTRY:
case IpMessageConst.IPMSG_SENDMSG:
refreshViews();
break;
}
}

@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
// TODO Auto-generated method stub
if (keyCode == KeyEvent.KEYCODE_BACK)
exit();
return true;
}

//更新数据和UI显示
private void refreshViews(){

//清空数据
strGroups.clear();
children.clear();

Map<String,User> currentUsers = new HashMap<String, User>();
currentUsers.putAll(BaseFragment.netThreadHelper.getUsers());
Queue<ChatMessage> msgQueue = BaseFragment.netThreadHelper.getReceiveMsgQueue();
Map<String, Integer> ip2Msg = new HashMap<String, Integer>();   //IP地址与未收消息个数的map
//遍历消息队列,填充ip2Msg
Iterator<ChatMessage> it = msgQueue.iterator();
while(it.hasNext()){
    ChatMessage chatMsg = it.next();
    String ip = chatMsg.getSenderIp();  //得到消息发送者IP
    Integer tempInt = ip2Msg.get(ip);
    if(tempInt == null){    //若map中没有IP对应的消息个数,则把IP添加进去,值为1
        ip2Msg.put(ip, 1);
    }else{  //若已经有对应ip,则将其值加一
        ip2Msg.put(ip, ip2Msg.get(ip)+1);
    }
}

//遍历currentUsers,更新strGroups和children
Iterator<String> iterator = currentUsers.keySet().iterator();
while (iterator.hasNext()) {
    User user = currentUsers.get(iterator.next());  
    //设置每个在线用户对应的未收消息个数
    if(ip2Msg.get(user.getIp()) == null){
        user.setMsgCount(0);
    }else{
        user.setMsgCount(ip2Msg.get(user.getIp()));
    }

    String groupName = user.getGroupName();
    int index = strGroups.indexOf(groupName);
    if(index == -1){ //没有相应分组,则添加分组,并添加对应child
        strGroups.add(groupName);

// List> childData = new ArrayList>();
// Map child = new HashMap();
// child.put("userName", user.getUserName());
// childData.add(child);
// children.add(childData);

        List<User> childData = new ArrayList<User>();
        childData.add(user);
        children.add(childData);
    }else{  //已存在分组,则将对应child添加到相对应分组中

// Map child = new HashMap();
// child.put("userName", user.getUserName());
// children.get(index).add(child);
children.get(index).add(user);
}

}

//更新groups

// for(int i = 0; i < strGroups.size(); i++){
// Map groupMap = new HashMap();
// groupMap.put("group", strGroups.get(i));
// groups.add(groupMap);
// }

adapter.notifyDataSetChanged(); //更新ExpandableListView

String countStr = "当前在线" + currentUsers.size() +"个用户";
totalUser.setText(countStr);    //更新TextView

}

@Override
public void onClick(View v) {
// TODO Auto-generated method stub
if(v.equals(refreshButton)){ //若是刷新
BaseFragment.netThreadHelper.refreshUsers();
refreshViews();
}

}

//判断wifi是否打开
public boolean isWifiActive(){
ConnectivityManager mConnectivity = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
if(mConnectivity != null){
NetworkInfo[] infos = mConnectivity.getAllNetworkInfo();

    if(infos != null){
        for(NetworkInfo ni: infos){
            if("WIFI".equals(ni.getTypeName()) && ni.isConnected())
                return true;
        }
    }
}

return false;

}

//得到本机IP地址
public String getLocalIpAddress(){
try{
Enumeration en = NetworkInterface.getNetworkInterfaces();
while(en.hasMoreElements()){
NetworkInterface nif = en.nextElement();
Enumeration enumIpAddr = nif.getInetAddresses();
while(enumIpAddr.hasMoreElements()){
InetAddress mInetAddress = enumIpAddr.nextElement();
if(!mInetAddress.isLoopbackAddress() && InetAddressUtils.isIPv4Address(mInetAddress.getHostAddress())){
return mInetAddress.getHostAddress().toString();
}
}
}
}catch(SocketException ex){
Log.e("MyFeiGeActivity", "获取本地IP地址失败");
}

return null;

}

//获取本机MAC地址
public String getLocalMacAddress(){
WifiManager wifi = (WifiManager)getSystemService(Context.WIFI_SERVICE);
WifiInfo info = wifi.getConnectionInfo();
return info.getMacAddress();
}

}
图片说明
求大神指点迷津!!!

  • 写回答

7条回答

  • jzk15666378163 2016-05-12 15:20
    关注

    图片说明

    评论

报告相同问题?

悬赏问题

  • ¥15 寻一个支付宝扫码远程授权登录的软件助手app
  • ¥15 解riccati方程组
  • ¥15 display:none;样式在嵌套结构中的已设置了display样式的元素上不起作用?
  • ¥30 用arduino开发esp32控制ps2手柄一直报错
  • ¥15 使用rabbitMQ 消息队列作为url源进行多线程爬取时,总有几个url没有处理的问题。
  • ¥15 求chat4.0解答一道线性规划题,用lingo编程运行,第一问要求写出数学模型和lingo语言编程模型,第二问第三问解答就行,我的ddl要到了谁来求了
  • ¥15 Ubuntu在安装序列比对软件STAR时出现报错如何解决
  • ¥50 树莓派安卓APK系统签名
  • ¥65 汇编语言除法溢出问题
  • ¥15 Visual Studio问题