package com.diandi.demo.ui.activity;
import android.app.ProgressDialog;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import com.diandi.demo.R;
import com.diandi.demo.adapter.NearPeopleAdapter;
import com.diandi.demo.model.User;
import com.diandi.demo.util.CollectionUtils;
import com.diandi.demo.widget.xlist.XListView;
import com.diandi.demo.widget.xlist.XListView.IXListViewListener;
import java.util.ArrayList;
import java.util.List;
import cn.bmob.im.task.BRequest;
import cn.bmob.v3.listener.CountListener;
import cn.bmob.v3.listener.FindListener;
/**
* *******************************************************************************
* ********* Author : klob(kloblic@gmail.com) .
* ********* Date : 2014-11-29 .
* ********* Time : 11:46 .
* ********* Project name : Diandi1.18 .
* ********* Version : 1.0
* ********* Copyright @ 2014, klob, All Rights Reserved
* *******************************************************************************
*/
public class NearPeopleActivity extends ActivityBase implements IXListViewListener, OnItemClickListener {
XListView mListView;
NearPeopleAdapter adapter;
String from = "";
List<User> nears = new ArrayList<User>();
int curPage = 0;
ProgressDialog progress;
private double QUERY_KILOMETERS = 1;//默认查询1公里范围内的人
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
findView();
initView();
}
@Override
void findView() {
setContentView(R.layout.activity_near_people);
mListView = (XListView) findViewById(R.id.list_near);
}
void initView() {
initTopBarForLeft("附近的人");
initXListView();
}
@Override
void bindEvent() {
}
private void initXListView() {
mListView.setOnItemClickListener(this);
// 首先不允许加载更多
mListView.setPullLoadEnable(false);
// 允许下拉
mListView.setPullRefreshEnable(true);
// 设置监听器
mListView.setXListViewListener(this);
//
mListView.pullRefreshing();
adapter = new NearPeopleAdapter(this, nears);
mListView.setAdapter(adapter);
initNearByList(false);
}
private void initNearByList(final boolean isUpdate) {
if (!isUpdate) {
progress = new ProgressDialog(NearPeopleActivity.this);
progress.setMessage("正在查询附近的人...");
progress.setCanceledOnTouchOutside(true);
progress.show();
}
if (!mApplication.getLatitude().equals("") && !mApplication.getLongtitude().equals("")) {
double latitude = Double.parseDouble(mApplication.getLatitude());
double longtitude = Double.parseDouble(mApplication.getLongtitude());
//封装的查询方法,当进入此页面时 isUpdate为false,当下拉刷新的时候设置为true就行。
//此方法默认每页查询10条数据,若想查询多于10条,可在查询之前设置BRequest.QUERY_LIMIT_COUNT,如:BRequest.QUERY_LIMIT_COUNT=20
// 此方法是新增的查询指定10公里内的性别为女性的用户列表,默认包含好友列表
//如果你不想查询性别为女的用户,可以将equalProperty设为null或者equalObj设为null即可
mUserManager.queryKiloMetersListByPage(isUpdate, 0, "location", longtitude, latitude, true, QUERY_KILOMETERS, "sex", false, new FindListener<User>() {
//此方法默认查询所有带地理位置信息的且性别为女的用户列表,如果你不想包含好友列表的话,将查询条件中的isShowFriends设置为false就行
// userManager.queryNearByListByPage(isUpdate,0,"location", longtitude, latitude, true,"sex",false,new FindListener<User>() {
@Override
public void onSuccess(List<User> arg0) {
// TODO Auto-generated method stub
if (CollectionUtils.isNotNull(arg0)) {
if (isUpdate) {
nears.clear();
}
adapter.addAll(arg0);
if (arg0.size() < BRequest.QUERY_LIMIT_COUNT) {
mListView.setPullLoadEnable(false);
ShowToast("附近的人搜索完成!");
} else {
mListView.setPullLoadEnable(true);
}
} else {
ShowToast("暂无附近的人!");
}
if (!isUpdate) {
progress.dismiss();
} else {
refreshPull();
}
}
@Override
public void onError(int arg0, String arg1) {
// TODO Auto-generated method stub
ShowToast("暂无附近的人!");
mListView.setPullLoadEnable(false);
if (!isUpdate) {
progress.dismiss();
} else {
refreshPull();
}
}
});
} else {
ShowToast("暂无附近的人!");
progress.dismiss();
}
}
/**
* 查询更多
*
* @param @param page
* @return void
* @throws
* @Title: queryMoreNearList
* @Description: TODO
*/
private void queryMoreNearList(int page) {
double latitude = Double.parseDouble(mApplication.getLatitude());
double longtitude = Double.parseDouble(mApplication.getLongtitude());
//查询10公里范围内的性别为女的用户列表
mUserManager.queryKiloMetersListByPage(true, page, "location", longtitude, latitude, true, QUERY_KILOMETERS, "sex", false, new FindListener<User>() {
//查询全部地理位置信息且性别为女性的用户列表
// userManager.queryNearByListByPage(true,page, "location", longtitude, latitude, true,"sex",false,new FindListener<User>() {
@Override
public void onSuccess(List<User> arg0) {
// TODO Auto-generated method stub
if (CollectionUtils.isNotNull(arg0)) {
adapter.addAll(arg0);
}
refreshLoad();
}
@Override
public void onError(int arg0, String arg1) {
// TODO Auto-generated method stub
LogE("查询更多附近的人出错:" + arg1);
mListView.setPullLoadEnable(false);
refreshLoad();
}
});
}
@Override
public void onItemClick(AdapterView<?> arg0, View arg1, int position, long arg3) {
// TODO Auto-generated method stub
User user = (User) adapter.getItem(position - 1);
Intent intent = new Intent(this, ProfileActivity.class);
intent.putExtra("from", "add");
intent.putExtra("username", user.getUsername());
startAnimActivity(intent);
}
@Override
public void onRefresh() {
// TODO Auto-generated method stub
initNearByList(true);
}
private void refreshLoad() {
if (mListView.getPullLoading()) {
mListView.stopLoadMore();
}
}
private void refreshPull() {
if (mListView.getPullRefreshing()) {
mListView.stopRefresh();
}
}
@Override
public void onLoadMore() {
// TODO Auto-generated method stub
double latitude = Double.parseDouble(mApplication.getLatitude());
double longtitude = Double.parseDouble(mApplication.getLongtitude());
//这是查询10公里范围内的性别为女用户总数
mUserManager.queryKiloMetersTotalCount(User.class, "location", longtitude, latitude, true, QUERY_KILOMETERS, "sex", false, new CountListener() {
//这是查询附近的人且性别为女性的用户总数
// userManager.queryNearTotalCount(User.class, "location", longtitude, latitude, true,"sex",false,new CountListener() {
@Override
public void onSuccess(int arg0) {
// TODO Auto-generated method stub
if (arg0 > nears.size()) {
curPage++;
queryMoreNearList(curPage);
} else {
ShowToast("数据加载完成");
mListView.setPullLoadEnable(false);
refreshLoad();
}
}
@Override
public void onFailure(int arg0, String arg1) {
// TODO Auto-generated method stub
LogE("查询附近的人总数失败" + arg1);
refreshLoad();
}
});
}
}