充电桩app代码

SwitchCityActivity.java 55KB

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