|
package com.electric.chargingpile.activity;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.graphics.PixelFormat;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.text.Editable;
import android.text.TextWatcher;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.view.ViewGroup.LayoutParams;
import android.view.WindowManager;
import android.view.inputmethod.InputMethodManager;
import android.widget.AbsListView;
import android.widget.AbsListView.OnScrollListener;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.BaseAdapter;
import android.widget.EditText;
import android.widget.GridView;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.ProgressBar;
import android.widget.TextView;
import android.widget.Toast;
import com.amap.api.location.AMapLocation;
import com.amap.api.location.AMapLocationClient;
import com.amap.api.location.AMapLocationClientOption;
import com.amap.api.location.AMapLocationListener;
import com.amap.api.maps.AMap;
import com.amap.api.maps.LocationSource;
import com.amap.api.maps.MapView;
import com.electric.chargingpile.R;
import com.electric.chargingpile.application.MainApplication;
import com.electric.chargingpile.data.City;
import com.electric.chargingpile.data.SwitchCity;
import com.electric.chargingpile.manager.ProfileManager;
import com.electric.chargingpile.util.BarColorUtil;
import com.electric.chargingpile.util.DBHelper;
import com.electric.chargingpile.util.DatabaseHelper;
import com.electric.chargingpile.util.JsonUtils;
import com.electric.chargingpile.util.PingYinUtil;
import com.electric.chargingpile.view.MyLetterListView;
import com.electric.chargingpile.view.MyLetterListView.OnTouchingLetterChangedListener;
import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.Socket;
import java.security.MessageDigest;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashMap;
import java.util.List;
import java.util.regex.Pattern;
public class SwitchCityActivity extends Activity implements OnScrollListener, AMapLocationListener {
private static final String TAG = "SwitchCityActivity";
private BaseAdapter adapter;
private ImageView iv_back;
TextView cityy;
private ResultListAdapter resultListAdapter;
private ListView personList;
private ListView resultList;
private TextView overlay; // 对话框首字母textview
private MyLetterListView letterListView; // A-Z listview
private HashMap<String, Integer> alphaIndexer;// 存放存在的汉语拼音首字母和与之对应的列表位置
private String[] sections;// 存放存在的汉语拼音首字母
private Handler handler;
private OverlayThread overlayThread; // 显示首字母对话框
private ArrayList<SwitchCity> allCity_lists; // 所有城市列表
private ArrayList<SwitchCity> city_lists;// 城市列表
private ArrayList<SwitchCity> city_hot;
private ArrayList<SwitchCity> city_result;
private ArrayList<String> city_history;
private EditText sh;
public static List<City> cityList = new ArrayList<City>();
private TextView tv_noresult;
InputMethodManager imm;
private Socket socket;
String date = "";
// private MyLocationListener mMyLocationListener;
private String currentCity; // 用于保存定位到的城市
private int locateProcess = 1; // 记录当前定位的状态 正在定位-定位成功-定位失败
private boolean isNeedFresh;
private AMap aMap;
private MapView mapView;
private LocationSource.OnLocationChangedListener mListener;
private AMapLocationClient mlocationClient;
private AMapLocationClientOption mLocationOption;
private DatabaseHelper helper;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_switch_city);
BarColorUtil.initStatusBarColor(SwitchCityActivity.this);
setUpMap();
// final OkHttpClient okHttpClient = new OkHttpClient();
//
// final Request request = new Request.Builder()
// .url("https://github.com/hongyangAndroid")
// .build();
//
// OkHttpUtil.enqueue(request, new Callback() {
// @Override
// public void onFailure(Request request, IOException e) {
//
// }
//
// @Override
// public void onResponse(Response response) throws IOException {
//
// }
// });
// try {
// Response response = okHttpClient
// .setConnectTimeout(10000,TimeUnit.MILLISECONDS) // Clone to make a customized OkHttp for this request.
// .setReadTimeout(500, TimeUnit.MILLISECONDS)
// .newCall(request)
// .execute();
// System.out.println("Response 1 succeeded: " + response);
// } catch (IOException e) {
// System.out.println("Response 1 failed: " + e);
// }
imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
personList = (ListView) findViewById(R.id.list_view);
allCity_lists = new ArrayList<SwitchCity>();
city_hot = new ArrayList<SwitchCity>();
city_result = new ArrayList<SwitchCity>();
city_history = new ArrayList<String>();
resultList = (ListView) findViewById(R.id.search_result);
sh = (EditText) findViewById(R.id.sh);
tv_noresult = (TextView) findViewById(R.id.tv_noresult);
helper = new DatabaseHelper(this);
iv_back = (ImageView) findViewById(R.id.iv_back);
iv_back.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
if (imm.isActive()) {
imm.hideSoftInputFromWindow(v.getWindowToken(), 0);
}
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
if (MainMapActivity.ll_tuijian.getVisibility() == View.VISIBLE) {
MainMapActivity.ll_tuijian.setVisibility(View.GONE);
MainMapActivity.ll_map_control.setVisibility(View.VISIBLE);
MainMapActivity.ll_top_right.setVisibility(View.VISIBLE);
}
}
}, 500);
finish();
}
});
sh.addTextChangedListener(new TextWatcher() {
@Override
public void onTextChanged(CharSequence s, int start, int before,
int count) {
if (s.toString() == null || "".equals(s.toString())) {
letterListView.setVisibility(View.VISIBLE);
personList.setVisibility(View.VISIBLE);
resultList.setVisibility(View.GONE);
tv_noresult.setVisibility(View.GONE);
} else {
city_result.clear();
letterListView.setVisibility(View.GONE);
personList.setVisibility(View.GONE);
getResultCityList(s.toString());
if (city_result.size() <= 0) {
tv_noresult.setVisibility(View.VISIBLE);
resultList.setVisibility(View.GONE);
} else {
tv_noresult.setVisibility(View.GONE);
resultList.setVisibility(View.VISIBLE);
resultListAdapter.notifyDataSetChanged();
}
}
}
@Override
public void beforeTextChanged(CharSequence s, int start, int count,
int after) {
}
@Override
public void afterTextChanged(Editable s) {
}
});
eteCityTime("{\"fun\":\"timer\"}");
letterListView = (MyLetterListView) findViewById(R.id.MyLetterListView01);
letterListView
.setOnTouchingLetterChangedListener(new LetterListViewListener());
alphaIndexer = new HashMap<String, Integer>();
handler = new Handler();
overlayThread = new OverlayThread();
isNeedFresh = true;
personList.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
if (position >= 4) {
InsertCity(allCity_lists.get(position).getCity());
hisCityInit();
setAdapter(allCity_lists, city_hot, city_history);
// Toast.makeText(getApplicationContext(),
// allCity_lists.get(position).getName(),
// Toast.LENGTH_SHORT).show();
boolean isToast = true;
for (int i = 0; i < cityList.size(); i++) {
final City zz = cityList.get(i);
if (zz.getCity().equals(allCity_lists.get(position).getCity())) {
Intent intent = new Intent();
// intent.putExtra("zhan_name", hList.get(position).getKeyword());
intent.putExtra("jing", zz.getPoi_jing());
intent.putExtra("wei", zz.getPoi_wei());
setResult(102, intent);
MainApplication.atCity = allCity_lists.get(position).getCity();
ProfileManager.getInstance().setAtCity(getApplicationContext(), MainApplication.atCity);
finish();
isToast = false;
return;
} else {
}
}
if (isToast) {
Toast.makeText(getApplicationContext(), "该城市没有站点", Toast.LENGTH_SHORT).show();
}
}
}
});
locateProcess = 1;
personList.setAdapter(adapter);
personList.setOnScrollListener(this);
resultListAdapter = new ResultListAdapter(this, city_result);
resultList.setAdapter(resultListAdapter);
resultList.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
InsertCity(city_result.get(position).getCity());
hisCityInit();
// MainFragment.chengshi = currentCity;
setAdapter(allCity_lists, city_hot, city_history);
boolean isToast = true;
for (int i = 0; i < cityList.size(); i++) {
final City zz = cityList.get(i);
if (zz.getCity().equals(city_result.get(position).getCity())) {
Intent intent = new Intent();
// intent.putExtra("zhan_name", hList.get(position).getKeyword());
intent.putExtra("jing", zz.getPoi_jing());
intent.putExtra("wei", zz.getPoi_wei());
setResult(102, intent);
// currentCity=city_result.get(position).getName();
MainApplication.atCity = city_result.get(position).getCity();
ProfileManager.getInstance().setAtCity(getApplicationContext(), MainApplication.atCity);
finish();
letterListView.setVisibility(View.VISIBLE);
personList.setVisibility(View.VISIBLE);
resultList.setVisibility(view.GONE);
if (imm.isActive()) {
imm.hideSoftInputFromWindow(view.getWindowToken(), 0);
}
isToast = false;
return;
} else {
}
}
if (isToast) {
Toast.makeText(getApplicationContext(), "该城市没有站点", Toast.LENGTH_SHORT).show();
}
// Toast.makeText(getApplicationContext(),
// city_result.get(position).getName(), Toast.LENGTH_SHORT)
// .show();
// finish();
}
});
initOverlay();
hotCityInit();
hisCityInit();
setAdapter(allCity_lists, city_hot, city_history);
// mLocationClient = new LocationClient(this.getApplicationContext());
// mMyLocationListener = new MyLocationListener();
// mLocationClient.registerLocationListener(mMyLocationListener);
// InitLocation();
// mLocationClient.start();
}
public void InsertCity(String name) {
SQLiteDatabase db = helper.getReadableDatabase();
Cursor cursor = db.rawQuery("select * from recentcity where name = '"
+ name + "'", null);
if (cursor.getCount() > 0) { //
db.delete("recentcity", "name = ?", new String[]{name});
}
db.execSQL("insert into recentcity(name, date) values('" + name + "', "
+ System.currentTimeMillis() + ")");
db.close();
}
// private static void InitLocation() {
// // 设置定位参数
// LocationClientOption option = new LocationClientOption();
// option.setCoorType("bd09ll"); // 设置坐标类型
// option.setScanSpan(10000); // 10分钟扫描1次
// // 需要地址信息,设置为其他任何值(string类型,且不能为null)时,都表示无地址信息。
// option.setAddrType("all");
// // 设置是否返回POI的电话和地址等详细信息。默认值为false,即不返回POI的电话和地址信息。
// option.setPoiExtraInfo(true);
// // 设置产品线名称。强烈建议您使用自定义的产品线名称,方便我们以后为您提供更高效准确的定位服务。
// option.setProdName("通过GPS定位我当前的位置");
// // 禁用启用缓存定位数据
// option.disableCache(true);
// // 设置最多可返回的POI个数,默认值为3。由于POI查询比较耗费流量,设置最多返回的POI个数,以便节省流量。
// option.setPoiNumber(3);
// // 设置定位方式的优先级。
// // 当gps可用,而且获取了定位结果时,不再发起网络请求,直接返回给用户坐标。这个选项适合希望得到准确坐标位置的用户。如果gps不可用,再发起网络请求,进行定位。
// option.setPriority(LocationClientOption.GpsFirst);
//
//// mLocationClient.setLocOption(option);
// }
private void cityInit() {
SwitchCity city = new SwitchCity("定位", "0"); // 当前定位城市
allCity_lists.add(city);
city = new SwitchCity("最近", "1"); // 最近访问的城市
allCity_lists.add(city);
city = new SwitchCity("全部", "3"); // 全部城市
allCity_lists.add(city);
city_lists = getCityList();
allCity_lists.addAll(city_lists);
}
/**
* 热门城市
*/
public void hotCityInit() {
SwitchCity city = new SwitchCity("上海", "2");
city_hot.add(city);
city = new SwitchCity("北京", "2");
city_hot.add(city);
city = new SwitchCity("广州", "2");
city_hot.add(city);
city = new SwitchCity("深圳", "2");
city_hot.add(city);
city = new SwitchCity("武汉", "2");
city_hot.add(city);
city = new SwitchCity("天津", "2");
city_hot.add(city);
city = new SwitchCity("西安", "2");
city_hot.add(city);
city = new SwitchCity("南京", "2");
city_hot.add(city);
city = new SwitchCity("杭州", "2");
city_hot.add(city);
city = new SwitchCity("成都", "2");
city_hot.add(city);
city = new SwitchCity("重庆", "2");
city_hot.add(city);
}
private void hisCityInit() {
city_history.clear();
SQLiteDatabase db = helper.getReadableDatabase();
Cursor cursor = db.rawQuery(
"select * from recentcity order by date desc limit 0, 3", null);
while (cursor.moveToNext()) {
city_history.add(cursor.getString(1));
}
cursor.close();
db.close();
}
@SuppressWarnings("unchecked")
private ArrayList<SwitchCity> getCityList() {
// eteCityTime("{\"fun\":\"timer\"}");
ArrayList<SwitchCity> list = new ArrayList<>();
if (!date.equals("")) {
Gson g = new Gson();
list = g.fromJson(date, new TypeToken<List<SwitchCity>>() {
}.getType());
}
//
//
// DBHelper dbHelper = new DBHelper(this);
// ArrayList<SwitchCity> list = new ArrayList<SwitchCity>();
// try {
// dbHelper.createDataBase();
// SQLiteDatabase db = dbHelper.getWritableDatabase();
// Cursor cursor = db.rawQuery("select * from city", null);
// SwitchCity city;
// while (cursor.moveToNext()) {
// city = new SwitchCity(cursor.getString(1), cursor.getString(2));
// list.add(city);
// }
// cursor.close();
// db.close();
// } catch (IOException e) {
// e.printStackTrace();
// }
Collections.sort(list, comparator);
Log.d("getCityList===", list.size() + "");
Log.d("getCityList===", list.get(0).getCity());
return list;
}
@SuppressWarnings("unchecked")
private void getResultCityList(String keyword) {
DBHelper dbHelper = new DBHelper(this);
try {
dbHelper.createDataBase();
SQLiteDatabase db = dbHelper.getWritableDatabase();
Cursor cursor = db.rawQuery(
"select * from city where name like \"%" + keyword
+ "%\" or pinyin like \"%" + keyword + "%\"", null);
SwitchCity city;
Log.e("info", "length = " + cursor.getCount());
while (cursor.moveToNext()) {
city = new SwitchCity(cursor.getString(1), cursor.getString(2));
city_result.add(city);
}
cursor.close();
db.close();
} catch (IOException e) {
e.printStackTrace();
}
Collections.sort(city_result, comparator);
}
/**
* a-z排序
*/
@SuppressWarnings("rawtypes")
Comparator comparator = new Comparator<SwitchCity>() {
@Override
public int compare(SwitchCity lhs, SwitchCity rhs) {
String a = lhs.getPinyin().substring(0, 1);
String b = rhs.getPinyin().substring(0, 1);
int flag = a.compareTo(b);
if (flag == 0) {
return a.compareTo(b);
} else {
return flag;
}
}
};
private void setAdapter(List<SwitchCity> list, List<SwitchCity> hotList,
List<String> hisCity) {
adapter = new ListAdapter(this, list, hotList, hisCity);
personList.setAdapter(adapter);
}
// @Override
// public void activate(OnLocationChangedListener listener) {
// mListener = listener;
// if (mlocationClient == null) {
// mlocationClient = new AMapLocationClient(this);
// mLocationOption = new AMapLocationClientOption();
// //设置定位监听
// mlocationClient.setLocationListener(this);
// //设置为高精度定位模式
// mLocationOption.setLocationMode(AMapLocationClientOption.AMapLocationMode.Hight_Accuracy);
// //设置定位参数
// mlocationClient.setLocationOption(mLocationOption);
// // 此方法为每隔固定时间会发起一次定位请求,为了减少电量消耗或网络流量消耗,
// // 注意设置合适的定位时间的间隔(最小间隔支持为2000ms),并且在合适时间调用stopLocation()方法来取消定位请求
// // 在定位结束后,在合适的生命周期调用onDestroy()方法
// // 在单次定位情况下,定位无论成功与否,都无需调用stopLocation()方法移除请求,定位sdk内部会移除
// mlocationClient.startLocation();
// }
// }
//
// @Override
// public void deactivate() {
// mListener = null;
// if (mlocationClient != null) {
// mlocationClient.stopLocation();
// mlocationClient.onDestroy();
// }
// mlocationClient = null;
// }
@Override
public void onLocationChanged(AMapLocation amapLocation) {
if (amapLocation != null) {
if (amapLocation != null
&& amapLocation.getErrorCode() == 0) {
Log.e("info", "city = " + amapLocation.getCity());
locateProcess = 2; // 定位成功
Log.e(TAG, "onLocationChanged: " + locateProcess);
currentCity = amapLocation.getCity().substring(0,
amapLocation.getCity().length() - 1);
MainMapActivity.tv_atCity.setText(currentCity);
locateProcess = 2; // 定位成功
personList.setAdapter(adapter);
adapter.notifyDataSetChanged();
Log.e(TAG, "onLocationChanged: " + locateProcess);
} else {
String errText = "定位失败," + amapLocation.getErrorCode() + ": " + amapLocation.getErrorInfo();
Log.e("AmapErr", errText);
locateProcess = 3; // 定位失败
personList.setAdapter(adapter);
adapter.notifyDataSetChanged();
}
}
}
private class ResultListAdapter extends BaseAdapter {
private LayoutInflater inflater;
private ArrayList<SwitchCity> results = new ArrayList<SwitchCity>();
public ResultListAdapter(Context context, ArrayList<SwitchCity> results) {
inflater = LayoutInflater.from(context);
this.results = results;
}
@Override
public int getCount() {
return results.size();
}
@Override
public Object getItem(int position) {
return position;
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder viewHolder = null;
if (convertView == null) {
convertView = inflater.inflate(R.layout.list_item, null);
viewHolder = new ViewHolder();
viewHolder.name = (TextView) convertView
.findViewById(R.id.name);
convertView.setTag(viewHolder);
} else {
viewHolder = (ViewHolder) convertView.getTag();
}
viewHolder.name.setText(results.get(position).getCity());
return convertView;
}
class ViewHolder {
TextView name;
}
}
public class ListAdapter extends BaseAdapter {
private Context context;
private LayoutInflater inflater;
private List<SwitchCity> list;
private List<SwitchCity> hotList;
private List<String> hisCity;
final int VIEW_TYPE = 5;
public ListAdapter(Context context, List<SwitchCity> list,
List<SwitchCity> hotList, List<String> hisCity) {
this.inflater = LayoutInflater.from(context);
this.list = list;
this.context = context;
this.hotList = hotList;
this.hisCity = hisCity;
alphaIndexer = new HashMap<String, Integer>();
sections = new String[list.size()];
for (int i = 0; i < list.size(); i++) {
// 当前汉语拼音首字母
String currentStr = getAlpha(list.get(i).getPinyin());
// 上一个汉语拼音首字母,如果不存在为" "
String previewStr = (i - 1) >= 0 ? getAlpha(list.get(i - 1)
.getPinyin()) : " ";
if (!previewStr.equals(currentStr)) {
String name = getAlpha(list.get(i).getPinyin());
alphaIndexer.put(name, i);
sections[i] = name;
}
}
}
@Override
public int getViewTypeCount() {
return VIEW_TYPE;
}
@Override
public int getItemViewType(int position) {
return position < 4 ? position : 4;
}
@Override
public int getCount() {
return list.size();
}
@Override
public Object getItem(int position) {
return list.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
ViewHolder holder;
@Override
public View getView(int position, View convertView, ViewGroup parent) {
TextView city = null;
int viewType = getItemViewType(position);
if (viewType == 0) { // 定位
convertView = inflater.inflate(R.layout.frist_list_item, null);
TextView locateHint = (TextView) convertView
.findViewById(R.id.locateHint);
city = (TextView) convertView.findViewById(R.id.lng_city);
final TextView finalCity = city;
Log.e(TAG, "onClick: " + locateProcess);
city.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
if (locateProcess == 2) {
// Toast.makeText(getApplicationContext(),
// finalCity.getText().toString(),
// Toast.LENGTH_SHORT).show();
boolean isToast = true;
for (int i = 0; i < cityList.size(); i++) {
final City zz = cityList.get(i);
if (zz.getCity().equals(currentCity)) {
InsertCity(currentCity);
Intent intent = new Intent();
// intent.putExtra("zhan_name", hList.get(position).getKeyword());
intent.putExtra("jing", zz.getPoi_jing());
intent.putExtra("wei", zz.getPoi_wei());
setResult(102, intent);
MainApplication.atCity = currentCity;
ProfileManager.getInstance().setAtCity(getApplicationContext(), MainApplication.atCity);
finish();
isToast = false;
return;
} else {
}
}
if (isToast) {
Toast.makeText(getApplicationContext(), "该城市没有站点", Toast.LENGTH_SHORT).show();
}
} else if (locateProcess == 3) {
locateProcess = 1;
personList.setAdapter(adapter);
adapter.notifyDataSetChanged();
mlocationClient.stopLocation();
isNeedFresh = true;
setUpMap();
currentCity = "";
mlocationClient.startLocation();
}
}
});
ProgressBar pbLocate = (ProgressBar) convertView
.findViewById(R.id.pbLocate);
if (locateProcess == 1) { // 正在定位
locateHint.setText("正在定位");
city.setVisibility(View.GONE);
pbLocate.setVisibility(View.VISIBLE);
} else if (locateProcess == 2) { // 定位成功
locateHint.setText("当前定位城市");
city.setVisibility(View.VISIBLE);
city.setText(currentCity);
mlocationClient.stopLocation();
pbLocate.setVisibility(View.GONE);
} else if (locateProcess == 3) {
locateHint.setText("未定位到城市,请选择");
city.setVisibility(View.VISIBLE);
city.setText("重新选择");
pbLocate.setVisibility(View.GONE);
}
} else if (viewType == 1) { // 最近访问城市
convertView = inflater.inflate(R.layout.recent_city, null);
GridView rencentCity = (GridView) convertView
.findViewById(R.id.recent_city);
rencentCity
.setAdapter(new HitCityAdapter(context, this.hisCity));
final TextView finalCity1 = city;
rencentCity.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
// currentCity=city_history.get(position);
boolean isToast = true;
for (int i = 0; i < cityList.size(); i++) {
final City zz = cityList.get(i);
if (zz.getCity().equals(city_history.get(position))) {
Intent intent = new Intent();
// intent.putExtra("zhan_name", hList.get(position).getKeyword());
intent.putExtra("jing", zz.getPoi_jing());
intent.putExtra("wei", zz.getPoi_wei());
setResult(102, intent);
// currentCity=hisCity.get(position);
MainApplication.atCity = city_history.get(position);
ProfileManager.getInstance().setAtCity(getApplicationContext(), MainApplication.atCity);
InsertCity(hisCity.get(position));
hisCityInit();
setAdapter(allCity_lists, city_hot, city_history);
finish();
isToast = false;
return;
} else {
}
}
if (isToast) {
Toast.makeText(getApplicationContext(), "该城市没有站点", Toast.LENGTH_SHORT).show();
InsertCity(hisCity.get(position));
hisCityInit();
setAdapter(allCity_lists, city_hot, city_history);
}
// Toast.makeText(getApplicationContext(),
// city_history.get(position), Toast.LENGTH_SHORT)
// .show();
// finalCity1.setText(city_history.get(position);
// convertView = inflater.inflate(R.layout.item_city, null);
// TextView city = (TextView) convertView.findViewById(R.id.city);
// finish();
}
});
TextView recentHint = (TextView) convertView
.findViewById(R.id.recentHint);
recentHint.setText("最近访问的城市");
} else if (viewType == 2) {
convertView = inflater.inflate(R.layout.recent_city, null);
GridView hotCity = (GridView) convertView
.findViewById(R.id.recent_city);
hotCity.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
InsertCity(city_hot.get(position).getCity());
currentCity = city_hot.get(position).getCity();
hisCityInit();
setAdapter(allCity_lists, city_hot, city_history);
// Toast.makeText(getApplicationContext(),
// city_hot.get(position).getName(),
// Toast.LENGTH_SHORT).show();
}
});
hotCity.setAdapter(new HotCityAdapter(context, this.hotList));
TextView hotHint = (TextView) convertView
.findViewById(R.id.recentHint);
hotHint.setText("热门城市");
convertView.setVisibility(View.GONE);
hotHint.setVisibility(View.GONE);
hotCity.setVisibility(View.GONE);
} else if (viewType == 3) {
convertView = inflater.inflate(R.layout.total_item, null);
} else {
if (convertView == null) {
convertView = inflater.inflate(R.layout.list_item, null);
holder = new ViewHolder();
holder.alpha = (TextView) convertView
.findViewById(R.id.alpha);
holder.name = (TextView) convertView
.findViewById(R.id.name);
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
// if (position >= 1) {
// holder.name.setText(list.get(position).getCity());
// String currentStr = getAlpha(list.get(position).getPinyin());
// String previewStr = (position - 1) >= 0 ? getAlpha(list
// .get(position - 1).getPinyin()) : " ";
// if (!previewStr.equals(currentStr)) {
// holder.alpha.setVisibility(View.VISIBLE);
// holder.alpha.setText(currentStr);
// } else {
// holder.alpha.setVisibility(View.GONE);
// }
// }
if (position >= 1) {
holder.name.setText(list.get(position).getCity());
// viewHolder.llMain.setOnClickListener(new OnClickListener() {
//
// @Override
// public void onClick(View v) {
// Toast.makeText(mContext,mAllCityList.get(position).getName(),0).show();
// }
// });
String currentStr = getAlpha(list.get(position).getPinyin());
String previewStr = (position - 1) >= 0 ? getAlpha(list
.get(position - 1).getPinyin()) : " ";
//Èç¹ûµ±Ç°µÄÌõÄ¿µÄ³ÇÊÐÃû×ֵį´ÒôµÄÊ××ÖĸºÍÆäǰһÌõÌõÄ¿µÄ³ÇÊеÄÃû×ֵį´ÒôµÄÊ××Öĸ²»Ïàͬ£¬Ôò½«²¼¾ÖÖеÄչʾ×ÖĸµÄTextViewչʾ³öÀ´
if (!previewStr.equals(currentStr)) {
holder.alpha.setVisibility(View.VISIBLE);
holder.alpha.setText(currentStr);
} else {
holder.alpha.setVisibility(View.GONE);
}
}
}
return convertView;
}
private class ViewHolder {
TextView alpha; // 首字母标题
TextView name; // 城市名字
}
}
@Override
protected void onStop() {
mlocationClient.stopLocation();
super.onStop();
}
class HotCityAdapter extends BaseAdapter {
private Context context;
private LayoutInflater inflater;
private List<SwitchCity> hotCitys;
public HotCityAdapter(Context context, List<SwitchCity> hotCitys) {
this.context = context;
inflater = LayoutInflater.from(this.context);
this.hotCitys = hotCitys;
}
@Override
public int getCount() {
return hotCitys.size();
}
@Override
public Object getItem(int position) {
return position;
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
convertView = inflater.inflate(R.layout.item_city, null);
// TextView city = (TextView) convertView.findViewById(R.id.city);
// city.setText(hotCitys.get(position).getCity());
return convertView;
}
}
class HitCityAdapter extends BaseAdapter {
private Context context;
private LayoutInflater inflater;
private List<String> hotCitys;
public HitCityAdapter(Context context, List<String> hotCitys) {
this.context = context;
inflater = LayoutInflater.from(this.context);
this.hotCitys = hotCitys;
}
@Override
public int getCount() {
return hotCitys.size();
}
@Override
public Object getItem(int position) {
return position;
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
convertView = inflater.inflate(R.layout.item_city, null);
// TextView city = (TextView) convertView.findViewById(R.id.city);
// city.setText(hotCitys.get(position));
return convertView;
}
}
private boolean mReady;
// 初始化汉语拼音首字母弹出提示框
private void initOverlay() {
mReady = true;
LayoutInflater inflater = LayoutInflater.from(this);
overlay = (TextView) inflater.inflate(R.layout.overlay, null);
overlay.setVisibility(View.INVISIBLE);
WindowManager.LayoutParams lp = new WindowManager.LayoutParams(
LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT,
WindowManager.LayoutParams.TYPE_APPLICATION,
WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE
| WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE,
PixelFormat.TRANSLUCENT);
WindowManager windowManager = (WindowManager) this
.getSystemService(Context.WINDOW_SERVICE);
windowManager.addView(overlay, lp);
}
private boolean isScroll = false;
private class LetterListViewListener implements
OnTouchingLetterChangedListener {
@Override
public void onTouchingLetterChanged(final String s) {
isScroll = false;
if (alphaIndexer.get(s) != null) {
int position = alphaIndexer.get(s);
personList.setSelection(position);
overlay.setText(s);
overlay.setVisibility(View.VISIBLE);
handler.removeCallbacks(overlayThread);
// 延迟一秒后执行,让overlay为不可见
handler.postDelayed(overlayThread, 1000);
}
}
}
// 设置overlay不可见
private class OverlayThread implements Runnable {
@Override
public void run() {
overlay.setVisibility(View.GONE);
}
}
// 获得汉语拼音首字母
private String getAlpha(String str) {
if (str == null) {
return "#";
}
if (str.trim().length() == 0) {
return "#";
}
char c = str.trim().substring(0, 1).charAt(0);
// 正则表达式,判断首字母是否是英文字母
Pattern pattern = Pattern.compile("^[A-Za-z]+$");
if (pattern.matcher(c + "").matches()) {
return (c + "").toUpperCase();
} else if (str.equals("0")) {
return "定位";
} else if (str.equals("1")) {
return "最近";
} else if (str.equals("3")) {
return "全部";
} else {
return "#";
}
}
@Override
public void onScrollStateChanged(AbsListView view, int scrollState) {
if (scrollState == SCROLL_STATE_TOUCH_SCROLL
|| scrollState == SCROLL_STATE_FLING) {
isScroll = true;
}
}
@Override
public void onScroll(AbsListView view, int firstVisibleItem,
int visibleItemCount, int totalItemCount) {
if (!isScroll) {
return;
}
if (mReady) {
String text;
String name = allCity_lists.get(firstVisibleItem).getCity();
String pinyin = allCity_lists.get(firstVisibleItem).getPinyin();
if (firstVisibleItem < 4) {
text = name;
} else {
text = PingYinUtil.converterToFirstSpell(pinyin)
.substring(0, 1).toUpperCase();
}
overlay.setText(text);
overlay.setVisibility(View.VISIBLE);
handler.removeCallbacks(overlayThread);
// 延迟一秒后执行,让overlay为不可见
handler.postDelayed(overlayThread, 1000);
}
}
public void eteCityTime(final String params) {
new Thread(new Runnable() {
@Override
public void run() {
try {
// 创建Socket
// socket = new Socket("192.168.1.110",54321);
socket = new Socket("cdz.evcharge.cc", 9503); // IP:10.14.114.127,端口54321
// 向服务器发送消息
PrintWriter out = new PrintWriter(new BufferedWriter(
new OutputStreamWriter(socket.getOutputStream())), true);
out.println(params);
// out.println("{\"fun\":\"getcity\"}");
// 接收来自服务器的消息
BufferedReader br = new BufferedReader(new InputStreamReader(
socket.getInputStream()));
// Message message = handle.obtainMessage();
// message.obj = line;
// message.arg1 = 1;
// handle.sendMessage(message);
String msg = br.readLine();
// Log.d("dddddss",msg);
// System.out.print("www:"+qqq);
// Log.d("qqq",key);
// if (msg != null) {
// Message mes = new Message();
// mes.obj = msg;
// mes.what = 2;
// hand.sendMessage(mes);
// }
// Message message = handler.obtainMessage();
// message.obj = line;
// message.arg1 = 17;
// handler.sendMessage(message);
String token = msg;
int time = (int) (System.currentTimeMillis() / 1000);
// cha = String.valueOf(time - Integer.parseInt(msg));
int cha = time - Integer.parseInt(msg);
String Token = getMD5(String.valueOf((System.currentTimeMillis() / 1000 - cha) / 10) + "qwerty");
// Point p1 = new Point(0, 0);
// LatLng locLeftTop = mBaiduMap.getProjection()
// .fromScreenLocation(p1);
// Point p2 = new Point(MainApplication.mScreenWidth, mMapView
// .getHeight());
// LatLng llRightBottom = mBaiduMap.getProjection()
// .fromScreenLocation(p2);
// url = "http://cdz.d1ev.com/zhannew/basic/web/index.php/zhanlist/getlist?poi_lux=" + locLeftTop.longitude + "" + "&poi_luy=" + locLeftTop.latitude + "" + "&poi_rdx=" + llRightBottom.longitude + "" + "&poi_rdy=" + llRightBottom.latitude + "" + "&suit_car2=" + MainApplication.userTpye + "&status=" + MainApplication.mapStatus + "&charge_cost_way=" + MainApplication.costWay;
String url = "{\"fun\":\"getcity\",\"suit_car2\":" + "\"" + "5" + "\"" + ",\"status\":" + "\"" + MainApplication.mapStatus + "\"" + ",\"charge_cost_way\":" + "\"" + MainApplication.costWay + "\"" + ",\"belong_attribute\":" + "\"" + MainApplication.shuxing + "\"" + ",\"speed\":" + "\"" + MainApplication.sudu + "\"" + ",\"timer\":" + "\"" + Token + "\"" + "}";
Log.d("wwwww", url);
// System.out.print("qazwsx:"+url);
if (MainApplication.userTpye == "") {
MainApplication.userTpye = "5";
}
eteCity("{\"fun\":\"getcity\",\"suit_car2\":" + "\"" + "5" + "\"" + ",\"status\":" + "\"" + "4" + "\"" + ",\"charge_cost_way\":" + "\"" + "" + "\"" + ",\"belong_attribute\":" + "\"" + "" + "\"" + ",\"speed\":" + "\"" + "0" + "\"" + ",\"timer\":" + "\"" + Token + "\"" + "}");
// System.err.println("Token:" + Token);
// if (msg != null) {
// // mTextView.setText(msg);
// } else {
// // mTextView.setText("数据错误!");
// }
// System.err.println("msg:" + msg);
// Log.d("msg:", msg);
// System.err.println("cha:" + cha);
// String t1 = String.valueOf(new Date().getTime()/1000);
//// Log.d("msg:", t1);
// System.err.println(t1);
// Token = getMD5(String.valueOf((System.currentTimeMillis()/1000 - cha-1)/10)+"qwerty");
// Log.d("11111","{\"fun\":\"init\",\"timer\":" + "\"" + Token + "\"" + "}");
// ete2("{\"fun\":\"init\",\"timer\":" + "\"" + Token + "\"" + "}");
// 关闭流
// out.close();
// br.close();
// // 关闭Socket
// socket.close();
} catch (Exception e) {
}
}
}).start();
}
public void eteCity(final String params) {
new Thread(new Runnable() {
@Override
public void run() {
try {
// 创建Socket
// socket = new Socket("192.168.1.110",54321);
// if (mBaiduMap.getMapStatus().zoom < 9.5f) {
// socket.close();
// stringTid.clear();
// }else {
socket = new Socket("cdz.evcharge.cc", 9503); // IP:10.14.114.127,端口54321
// 向服务器发送消息
PrintWriter out = new PrintWriter(new BufferedWriter(
new OutputStreamWriter(socket.getOutputStream())), true);
out.println(params);
// out.println("{\"fun\":\"getcity\"}");
// 接收来自服务器的消息
BufferedReader br = new BufferedReader(new InputStreamReader(
socket.getInputStream()));
String msg = br.readLine();
// Log.d("dddddmsg",msg);
if (msg != null) {
Message mes = new Message();
mes.obj = msg;
mes.what = 4;
hand.sendMessage(mes);
}
// if (msg != null) {
// // mTextView.setText(msg);
// } else {
// // mTextView.setText("数据错误!");
// }
// System.err.println("msg:"+msg);
// String t1 = String.valueOf(new Date().getTime()/1000);
// System.err.println(t1);
// 关闭流
out.close();
br.close();
// 关闭Socket
socket.close();
// }
} catch (Exception e) {
}
}
}).start();
}
//这是请求回来的站点数据
Handler hand = new Handler() {
public void handleMessage(android.os.Message msg) {
switch (msg.what) {
case 4:
try {
try {
date = JsonUtils.getKeyResult(msg.obj.toString(), "data");
cityInit();
Log.e("data", date);
Gson g = new Gson();
List<City> ll = g.fromJson(date, new TypeToken<List<City>>() {
}.getType());
Log.e("city_size==", ll.size() + "");
// stringTid.clear();
cityList.clear();
// mBaiduMap.clear();
if (ll != null && ll.size() > 0) {
// List<Zhan> ll = DES3.encode(l);
cityList.addAll(ll);
// initOverlayy(cityList);
// if (center != null) {
// for (int i = 0; i < cityList.size(); i++) {
// double dwei = Double.parseDouble(list.get(i)
// .getPoi_wei());
// double djing = Double.parseDouble(list.get(i)
// .getPoi_jing());
// LatLng lll = new LatLng(dwei, djing);
//// double d = DistanceUtil.getDistance(center, ll);
//// cityList.get(i).setDistance(Util.getDistance(d));
// }
//
// }
// if (list.get(i).getSupplier().equals("特来电")){
// zhanOne=list.get(i);
// getDetailThread(list.get(i).getTid());
// }
// initOverlay(list);
} else {
// Toast.makeText(getActivity(), "没有合适的充电桩", Toast.LENGTH_SHORT)
// .show();
// showTextToast("没有合适的充电桩");
// if (center != null) {
// BitmapDescriptor point = BitmapDescriptorFactory
// .fromResource(R.drawable.point_icon);
// oo = new MarkerOptions().position(center)
// .anchor(0.5f, 0.5f).zIndex(7).icon(point)
// .draggable(true);
// mBaiduMap.addOverlay(oo);
// }
// }
// Log.e("city===",cityList.size()+"");
// if (list.size() > 0) {
// list = Util.getSortList(list);
}
adapter.notifyDataSetChanged();
} catch (Exception e) {
// BitmapDescriptor point = BitmapDescriptorFactory
// .fromResource(R.drawable.point_icon);
// oo = new MarkerOptions().position(center).
// anchor(0.5f, 0.5f).zIndex(7)
// .draggable(true).icon(point);
// mBaiduMap.addOverlay(oo);
// Toast.makeText(getActivity(),"该范围内没有充电桩",Toast.LENGTH_SHORT).show();
}
} catch (Exception e) {
e.printStackTrace();
}
break;
default:
break;
}
}
;
};
public static String getMD5(String content) {
try {
MessageDigest digest = MessageDigest.getInstance("MD5");
digest.update(content.getBytes());
return getHashString(digest);
} catch (Exception e) {
}
return null;
}
private static String getHashString(MessageDigest digest) {
StringBuilder builder = new StringBuilder();
for (byte b : digest.digest()) {
builder.append(Integer.toHexString((b >> 4) & 0xf));
builder.append(Integer.toHexString(b & 0xf));
}
return builder.toString().toLowerCase();
}
private void setUpMap() {
// //声明mLocationOption对象
// AMapLocationClientOption mLocationOption = null;
try {
mlocationClient = new AMapLocationClient(this);
//初始化定位参数
mLocationOption = new AMapLocationClientOption();
//设置定位监听
mlocationClient.setLocationListener(this);
//设置定位模式为高精度模式,Battery_Saving为低功耗模式,Device_Sensors是仅设备模式
mLocationOption.setLocationMode(AMapLocationClientOption.AMapLocationMode.Hight_Accuracy);
mLocationOption.setOnceLocation(true);
//设置是否强制刷新WIFI,默认为强制刷新
mLocationOption.setWifiActiveScan(false);
//设置定位间隔,单位毫秒,默认为2000ms
// mLocationOption.setInterval(2000);
//设置定位参数
mlocationClient.setLocationOption(mLocationOption);
// 此方法为每隔固定时间会发起一次定位请求,为了减少电量消耗或网络流量消耗,
// 注意设置合适的定位时间的间隔(最小间隔支持为2000ms),并且在合适时间调用stopLocation()方法来取消定位请求
// 在定位结束后,在合适的生命周期调用onDestroy()方法
// 在单次定位情况下,定位无论成功与否,都无需调用stopLocation()方法移除请求,定位sdk内部会移除
//启动定位
mlocationClient.startLocation();
} catch (Exception e) {
e.printStackTrace();
}
}
@Override
protected void onPause() {
super.onPause();
}
}
|