充电桩app代码

SearchActivity.java 50KB

    package com.electric.chargingpile.activity; import android.app.Activity; import android.content.ContentValues; import android.content.Context; import android.content.DialogInterface; import android.content.Intent; import android.content.pm.PackageInfo; import android.content.pm.PackageManager; import android.database.Cursor; import android.graphics.drawable.BitmapDrawable; import android.os.Bundle; import android.os.Handler; import androidx.appcompat.app.AlertDialog; import android.text.Editable; import android.text.Html; import android.text.TextUtils; import android.text.TextWatcher; import android.view.Gravity; import android.view.KeyEvent; import android.view.LayoutInflater; import android.view.View; import android.view.View.OnClickListener; import android.view.View.OnKeyListener; import android.view.ViewGroup; import android.view.inputmethod.InputMethodManager; import android.widget.AbsListView; import android.widget.AdapterView; import android.widget.AdapterView.OnItemClickListener; import android.widget.BaseAdapter; import android.widget.Button; import android.widget.EditText; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.ListView; import android.widget.PopupWindow; import android.widget.SimpleCursorAdapter; import android.widget.TextView; import android.widget.Toast; import com.amap.api.maps.AMapUtils; import com.amap.api.maps.model.LatLng; import com.amap.api.services.core.PoiItem; import com.amap.api.services.core.SuggestionCity; import com.amap.api.services.help.Inputtips; import com.amap.api.services.help.Tip; import com.amap.api.services.poisearch.PoiResult; import com.amap.api.services.poisearch.PoiSearch; import com.amap.api.services.poisearch.PoiSearch.OnPoiSearchListener; import com.electric.chargingpile.R; import com.electric.chargingpile.application.MainApplication; import com.electric.chargingpile.data.HistoryInfo; import com.electric.chargingpile.data.PileData; import com.electric.chargingpile.data.RecommendZhan; import com.electric.chargingpile.manager.ProfileManager; import com.electric.chargingpile.util.BarColorUtil; import com.electric.chargingpile.util.DBOpenHandler; import com.electric.chargingpile.util.DES3S; import com.electric.chargingpile.util.JsonUtils; import com.electric.chargingpile.util.Util; import com.umeng.analytics.MobclickAgent; import com.zhy.http.okhttp.OkHttpUtils; import com.zhy.http.okhttp.callback.StringCallback; import java.net.URISyntaxException; import java.util.ArrayList; import java.util.Calendar; import java.util.HashMap; import java.util.List; import java.util.Map; import okhttp3.Call; public class SearchActivity extends Activity implements OnClickListener, Inputtips.InputtipsListener, OnPoiSearchListener { private TextView tvSearch; private Toast toast = null; private EditText etSearch; private ImageView ivClear; private ListView lvContent; private SearchAdapter adapter; private List<Map<String, String>> addressList = new ArrayList<Map<String, String>>(); private List<Map<String, String>> addressAllList = new ArrayList<Map<String, String>>(); private List<HistoryInfo> historyInfoList = new ArrayList<HistoryInfo>(); private HistoryInfo history; private List<RecommendZhan> pointList = new ArrayList<>(); private List<RecommendZhan> pointFullList = new ArrayList<>(); private Map<String, String> map; private View convertView = null; InputMethodManager imm; private LinearLayout ll_menu; ListView historyList; private PoiResult poiResult;// poi返回的结果 private int currentPage = 0;// 当前页面,从0开始计数 private PoiSearch.Query query;// Poi查询条件类 private PoiSearch poiSearch;// POI搜索 private String keyWord = "";// 要输入的poi搜索关键字 private static final String TAG = "SearchActivity"; private String gd_jing, gd_wei; private View popupWindowView; private PopupWindow popupWindow; private Button cancleButton; private TextView tvOne, tvTwo, tvThree; private Double bd_lon, bd_lat, bd_jing, bd_wei; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_search); BarColorUtil.initStatusBarColor(SearchActivity.this); initView(); } private void initView() { lvContent = (ListView) findViewById(R.id.lv_search_list); lvContent.setDividerHeight(0); historyList = (ListView) findViewById(R.id.lv_history_list); tvSearch = (TextView) findViewById(R.id.tv_search); tvSearch.setOnClickListener(this); ivClear = (ImageView) findViewById(R.id.iv_search_clear); ivClear.setOnClickListener(this); etSearch = (EditText) findViewById(R.id.et_search); etSearch.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { DBOpenHandler db = new DBOpenHandler(SearchActivity.this, ""); Cursor c = db.query(); System.err.println(c.getCount()); if (c.getCount() <= 0) { return; } String[] from = {"keyword", "type"}; int[] to = {R.id.search_name, R.id.search_address}; historyInfoList.clear(); while (c.moveToNext()) { history = new HistoryInfo(); history.setIds(c.getString(c.getColumnIndex("keyword"))); history.setJing(c.getString(c.getColumnIndex("jing"))); history.setWei(c.getString(c.getColumnIndex("wei"))); historyInfoList.add(history); } SimpleCursorAdapter adapter = new SimpleCursorAdapter(SearchActivity.this, R.layout.history_item, c, from, to, 0); historyList.setAdapter(adapter); } }); etSearch.addTextChangedListener(new TextWatcher() { @Override public void beforeTextChanged(CharSequence s, int start, int count, int after) { } @Override public void onTextChanged(CharSequence s, int start, int before, int count) { if (TextUtils.isEmpty(s.toString().trim())) { ivClear.setVisibility(View.GONE); } else { ivClear.setVisibility(View.VISIBLE); } } @Override public void afterTextChanged(Editable s) { } }); etSearch.setOnKeyListener(new OnKeyListener() { @Override public boolean onKey(View v, int keyCode, KeyEvent event) { if (keyCode == KeyEvent.KEYCODE_ENTER && event.getAction() == KeyEvent.ACTION_DOWN) { // 点击搜索键进行搜索。 InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); if (imm.isActive()) { View view = getWindow().peekDecorView(); if (view != null) { imm.hideSoftInputFromWindow(view.getWindowToken(), 0); } } String s = etSearch.getText().toString().trim(); if (TextUtils.isEmpty(s)) { Toast.makeText(SearchActivity.this, "搜索内容不能为空", Toast.LENGTH_SHORT).show(); addressList.clear(); addressAllList.clear(); historyList.setVisibility(View.VISIBLE); lvContent.setVisibility(View.GONE); } else { keyWord = s; doSearchQuery(); doPointNameSearchQuery(); lvContent.setVisibility(View.VISIBLE); historyList.setVisibility(View.GONE); System.out.println("hello www"); } return true; } return false; } }); String search_address = ProfileManager.getInstance().getSearchAddress(this); if (TextUtils.isEmpty(search_address)) { etSearch.setText(""); etSearch.setSelection(etSearch.getText().length()); addressList.clear(); addressAllList.clear(); historyList.setVisibility(View.VISIBLE); lvContent.setVisibility(View.GONE); ivClear.setVisibility(View.GONE); } else { etSearch.setText(search_address); keyWord = search_address; doSearchQuery(); doPointNameSearchQuery(); lvContent.setVisibility(View.VISIBLE); historyList.setVisibility(View.GONE); ivClear.setVisibility(View.VISIBLE); } lvContent.setOnScrollListener(new AbsListView.OnScrollListener() { @Override public void onScrollStateChanged(AbsListView view, int scrollState) { View v = getWindow().peekDecorView(); if (v != null) { imm.hideSoftInputFromWindow(v.getWindowToken(), 0); } } @Override public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) { } }); historyList.setOnScrollListener(new AbsListView.OnScrollListener() { @Override public void onScrollStateChanged(AbsListView view, int scrollState) { View v = getWindow().peekDecorView(); if (v != null) { imm.hideSoftInputFromWindow(v.getWindowToken(), 0); } } @Override public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) { } }); adapter = new SearchAdapter(this, addressList, pointList); lvContent.setAdapter(adapter); // 点击历史记录 historyList.setOnItemClickListener(new OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { Intent intent = new Intent(); intent.putExtra("zhan_name", historyInfoList.get(position).getIds()); intent.putExtra("jing", historyInfoList.get(position).getJing()); intent.putExtra("wei", historyInfoList.get(position).getWei()); ProfileManager.getInstance().setSearchAddress(getApplicationContext(), historyInfoList.get(position).getIds()); setResult(101, intent); finish(); View v = getWindow().peekDecorView(); if (v != null) { imm.hideSoftInputFromWindow(v.getWindowToken(), 0); } } }); lvContent.setOnItemClickListener(new OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { DBOpenHandler db = new DBOpenHandler(SearchActivity.this, ""); db.queryOne(etSearch.getText().toString()); ContentValues values = new ContentValues(); values.put("time", System.currentTimeMillis()); values.put("keyword", addressList.get(position).get("name")); values.put("type", addressList.get(position).get("address")); values.put("jing", addressList.get(position).get("jing")); values.put("wei", addressList.get(position).get("wei")); db.insert(values); Cursor c = db.query(); System.err.println(c.getCount()); if (c.getCount() <= 0) { return; } String[] from = {"keyword", "type"}; int[] to = {R.id.search_name, R.id.search_address}; SimpleCursorAdapter historyAdapter = new SimpleCursorAdapter(SearchActivity.this, R.layout.history_item, c, from, to, 0); historyList.setAdapter(historyAdapter); Intent intent = new Intent(); intent.putExtra("zhan_name", addressList.get(position).get("name")); intent.putExtra("jing", addressList.get(position).get("jing")); intent.putExtra("wei", addressList.get(position).get("wei")); ProfileManager.getInstance().setSearchAddress(getApplicationContext(), addressList.get(position).get("name")); setResult(101, intent); View v = getWindow().peekDecorView(); if (v != null) { imm.hideSoftInputFromWindow(v.getWindowToken(), 0); } finish(); } }); try { imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); if (!imm.isActive()) { ll_menu.setVisibility(View.GONE); } } catch (Exception e) { e.printStackTrace(); } if (search_address.equals("")) { lvContent.setVisibility(View.GONE); historyList.setVisibility(View.VISIBLE); } DBOpenHandler db = new DBOpenHandler(SearchActivity.this, ""); Cursor c = db.query(); System.err.println(c.getCount()); if (c.getCount() <= 0) { return; } historyInfoList.clear(); while (c.moveToNext()) { history = new HistoryInfo(); history.setIds(c.getString(c.getColumnIndex("keyword"))); history.setJing(c.getString(c.getColumnIndex("jing"))); history.setWei(c.getString(c.getColumnIndex("wei"))); historyInfoList.add(history); } String[] from = {"keyword", "type"}; int[] to = {R.id.search_name, R.id.search_address}; final SimpleCursorAdapter adapter3 = new SimpleCursorAdapter(SearchActivity.this, R.layout.history_item, c, from, to, 0); convertView = LayoutInflater.from(getApplicationContext()).inflate(R.layout.item_clear, null); historyList.addFooterView(convertView); TextView tv_clear = (TextView) convertView.findViewById(R.id.tv_historyClear); tv_clear.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { AlertDialog.Builder builder = new AlertDialog.Builder(SearchActivity.this); builder.setTitle("提示"); builder.setMessage("确认删除历史记录?"); builder.setCancelable(false); builder.setPositiveButton("确定", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { DBOpenHandler db = new DBOpenHandler(SearchActivity.this, ""); db.delTable(); historyList.setVisibility(View.GONE); adapter3.notifyDataSetChanged(); } }); builder.setNegativeButton("取消", null); builder.create().show(); } }); historyList.setAdapter(adapter3); } @Override public void onClick(View v) { switch (v.getId()) { case R.id.tv_search: if (imm.isActive()) { View view = getWindow().peekDecorView(); if (view != null) { imm.hideSoftInputFromWindow(view.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); MainMapActivity.detailsBack = true; finish(); break; //界面搜索框内清空图标 case R.id.iv_search_clear: ivClear.setVisibility(View.GONE); etSearch.setText(""); addressList.clear(); addressAllList.clear(); adapter.notifyDataSetChanged(); lvContent.setVisibility(View.GONE); historyList.setVisibility(View.VISIBLE); break; } } private void showTextToast(String msg) { if (toast == null) { toast = Toast.makeText(getApplicationContext(), msg, Toast.LENGTH_SHORT); } else { toast.setText(msg); } toast.show(); } @Override public void onGetInputtips(List<Tip> list, int i) { } @Override public void onPoiSearched(PoiResult result, int rCode) { if (rCode == 1000) { if (result != null && result.getQuery() != null) {// 搜索poi的结果 if (result.getQuery().equals(query)) {// 是否是同一条 poiResult = result; // 取得搜索到的poiitems有多少页 List<PoiItem> poisList = poiResult.getPois();// 取得第一页的poiitem数据,页数从数字0开始 List<SuggestionCity> suggestionCities = poiResult.getSearchSuggestionCitys();// 当搜索不到poiitem数据时,会返回含有搜索关键字的城市信息 if (poisList != null && poisList.size() > 0) { addressList.clear(); addressAllList.clear(); try { for (int i = 0; i < poisList.size(); i++) { map = new HashMap<String, String>(); map.put("name", poisList.get(i).getTitle()); map.put("address", poisList.get(i).getSnippet()); map.put("jing", poisList.get(i).getLatLonPoint().getLongitude() + ""); map.put("wei", poisList.get(i).getLatLonPoint().getLatitude() + ""); map.put("url", ""); addressAllList.add(map); } for (Map<String, String> address : addressAllList) { addressList.add(address); if (addressList.size() >= 5) { break; } } if (addressList != null && addressList.size() > 0) { runOnUiThread(new Runnable() { @Override public void run() { adapter.notifyDataSetChanged(); } }); } } catch (Exception e) { e.printStackTrace(); } } else { Toast.makeText(SearchActivity.this, "抱歉,未找到结果", Toast.LENGTH_SHORT).show(); addressList.clear(); addressAllList.clear(); adapter.notifyDataSetChanged(); } } } else { } } else { } } @Override public void onPoiItemSearched(PoiItem poiItem, int i) { } public class SearchAdapter extends BaseAdapter { private Context context; private List<Map<String, String>> list; private List<RecommendZhan> pList; public SearchAdapter(Context context, List<Map<String, String>> list, List<RecommendZhan> pointList) { this.context = context; this.list = list; this.pList = pointList; } @Override public int getCount() { return list.size() + pointList.size(); } @Override public Object getItem(int position) { if (position < list.size()) { return list.get(position); } else { return pointList.get(position - list.size()); } } @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 = LayoutInflater.from(context).inflate(R.layout.item_search, null); viewHolder = new ViewHolder(); viewHolder.address_item = convertView.findViewById(R.id.address_item); viewHolder.point_item = convertView.findViewById(R.id.point_item); viewHolder.name = convertView.findViewById(R.id.search_name); viewHolder.address = convertView.findViewById(R.id.search_address); viewHolder.address_header_title = convertView.findViewById(R.id.address_header_title); viewHolder.query_all_addresses = convertView.findViewById(R.id.query_all_addresses); viewHolder.point_header_title = convertView.findViewById(R.id.point_header_title); viewHolder.query_all_points = convertView.findViewById(R.id.query_all_points); viewHolder.zhan_name = convertView.findViewById(R.id.zhan_name); viewHolder.red_paper_bag = convertView.findViewById(R.id.red_paper_bag); viewHolder.score_img = convertView.findViewById(R.id.score_img); viewHolder.score_text = convertView.findViewById(R.id.score_text); viewHolder.distance = convertView.findViewById(R.id.distance); viewHolder.zongjia_container = convertView.findViewById(R.id.zongjia_container); viewHolder.zongjia = convertView.findViewById(R.id.zongjia); viewHolder.charge_record_cnt = convertView.findViewById(R.id.charge_record_cnt); viewHolder.comment_cnt = convertView.findViewById(R.id.comment_cnt); viewHolder.times_line = convertView.findViewById(R.id.times_line); viewHolder.fenshi_info_textview = convertView.findViewById(R.id.fenshi_info_textview); viewHolder.iv_label_public = convertView.findViewById(R.id.iv_label_public); viewHolder.iv_label_ground = convertView.findViewById(R.id.iv_label_ground); viewHolder.iv_label_free_park = convertView.findViewById(R.id.iv_label_free_park); viewHolder.payment_method = convertView.findViewById(R.id.payment_method); viewHolder.recommend_nav = convertView.findViewById(R.id.recommend_nav); viewHolder.window_tv_fast_free_label = convertView.findViewById(R.id.window_tv_fast_free_label); viewHolder.window_tv_fast_free_num = convertView.findViewById(R.id.window_tv_fast_free_num); viewHolder.window_tv_fast_total_num = convertView.findViewById(R.id.window_tv_fast_total_num); viewHolder.window_tv_slow_free_label = convertView.findViewById(R.id.window_tv_slow_free_label); viewHolder.window_tv_slow_free_num = convertView.findViewById(R.id.window_tv_slow_free_num); viewHolder.window_tv_slow_total_num = convertView.findViewById(R.id.window_tv_slow_total_num); convertView.setTag(viewHolder); } else { viewHolder = (ViewHolder) convertView.getTag(); } if (position < list.size()) { showAddressView(viewHolder, list.get(position), position); } else { RecommendZhan point = pList.get(position - list.size()); showPointView(viewHolder, point, position); } return convertView; } class ViewHolder { LinearLayout address_item, point_item, zongjia_container; TextView name, address, address_header_title, query_all_addresses; TextView point_header_title, query_all_points, zhan_name, score_text, distance, zongjia, charge_record_cnt, comment_cnt, fenshi_info_textview, iv_label_public, iv_label_ground, iv_label_free_park, payment_method, window_tv_fast_free_label, window_tv_fast_free_num, window_tv_fast_total_num, window_tv_slow_free_label, window_tv_slow_free_num, window_tv_slow_total_num; ImageView red_paper_bag, score_img; View times_line; Button recommend_nav; } private void showAddressView(ViewHolder viewHolder, Map<String, String> item, int position) { viewHolder.address_item.setVisibility(View.VISIBLE); viewHolder.point_item.setVisibility(View.GONE); String name = item.get("name"); String address = item.get("address"); name = name.replace(keyWord, "<font color=\"#1BB637\">" + keyWord + "</font>"); address = address.replace(keyWord, "<font color=\"#1BB637\">" + keyWord + "</font>"); viewHolder.name.setText(Html.fromHtml(name, Html.FROM_HTML_MODE_LEGACY)); viewHolder.address.setText(Html.fromHtml(address, Html.FROM_HTML_MODE_LEGACY)); if (position == 0) { viewHolder.address_header_title.setVisibility(View.VISIBLE); viewHolder.address_header_title.setText(keyWord + "相关目的地"); } else { viewHolder.address_header_title.setVisibility(View.GONE); } if (position == list.size() - 1 && addressAllList.size() > 5) { viewHolder.query_all_addresses.setVisibility(View.VISIBLE); } else { viewHolder.query_all_addresses.setVisibility(View.GONE); } viewHolder.query_all_addresses.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { // 查看所有 // TODO by hyg add } }); } private void showPointView(ViewHolder viewHolder, RecommendZhan point, int position) { viewHolder.point_item.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Intent intent = new Intent(getApplication(), NewZhanDetailsActivity.class); intent.putExtra("zhan_id", point.getId()); startActivity(intent); } }); viewHolder.address_item.setVisibility(View.GONE); viewHolder.point_item.setVisibility(View.VISIBLE); if (position == list.size()) { viewHolder.point_header_title.setVisibility(View.VISIBLE); viewHolder.point_header_title.setText(keyWord + "相关充电桩"); } else { viewHolder.point_header_title.setVisibility(View.GONE); } if (position == list.size() + pList.size() - 1 && pointFullList.size() > 3) { viewHolder.query_all_points.setVisibility(View.VISIBLE); } else { viewHolder.query_all_points.setVisibility(View.GONE); } viewHolder.query_all_points.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { // 查看全部站点 } }); viewHolder.zhan_name.setText(point.getZhan_name()); if ("1".equals(point.getOwn_pay())) { viewHolder.red_paper_bag.setVisibility(View.VISIBLE); } else { viewHolder.red_paper_bag.setVisibility(View.GONE); } viewHolder.red_paper_bag.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Intent intent_example = new Intent(getApplicationContext(), ExampleActivity.class); intent_example.setFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION); startActivity(intent_example); overridePendingTransition(0, 0); } }); showStarInfoView(viewHolder, point); if ("0m".equals(point.getDistance())) { viewHolder.distance.setText("未知"); } else { viewHolder.distance.setText(point.getDistance()); } if (point.getZongjia() == 0) { viewHolder.zongjia_container.setVisibility(View.GONE); } else { viewHolder.zongjia_container.setVisibility(View.VISIBLE); viewHolder.zongjia.setText(String.format("%.2f", point.getZongjia())); } if (point.getComment_cnt() == 0 || point.getCharge_record_cnt() == 0 && point.getComment_cnt() == 0) { viewHolder.times_line.setVisibility(View.GONE); } else { viewHolder.times_line.setVisibility(View.VISIBLE); } if (point.getCharge_record_cnt() == 0) { viewHolder.charge_record_cnt.setVisibility(View.GONE); } else { viewHolder.charge_record_cnt.setVisibility(View.VISIBLE); if (point.getCharge_record_cnt() < 1000) { viewHolder.charge_record_cnt.setText(point.getCharge_record_cnt() + "次充电成功"); } else if (point.getCharge_record_cnt() < 10000) { viewHolder.charge_record_cnt.setText(point.getCharge_record_cnt() / 1000 + "k+次充电成功"); } else { viewHolder.charge_record_cnt.setText(point.getCharge_record_cnt() / 10000 + "w+次充电成功"); } } if (point.getComment_cnt() == 0) { viewHolder.comment_cnt.setVisibility(View.GONE); } else { viewHolder.comment_cnt.setVisibility(View.VISIBLE); if (point.getComment_cnt() < 1000) { viewHolder.comment_cnt.setText(point.getComment_cnt() + "次评论"); } else if (point.getComment_cnt() < 10000) { viewHolder.comment_cnt.setText(point.getComment_cnt() / 1000 + "k+次评论"); } else { viewHolder.comment_cnt.setText(point.getComment_cnt() / 10000 + "w+次评论"); } } if ("1".equals(point.getFenshi_is())) { viewHolder.fenshi_info_textview.setText(""); ArrayList<PileData.FenshiInfoBean> fenshiList = (ArrayList<PileData.FenshiInfoBean>) JsonUtils.parseToObjectList(point.getFenshi_info(), PileData.FenshiInfoBean.class); Calendar calendar = Calendar.getInstance(); int hours = calendar.get(Calendar.HOUR_OF_DAY); int minutes = calendar.get(Calendar.MINUTE); int totalMinutes = hours * 60 + minutes; for (PileData.FenshiInfoBean bean : fenshiList) { if (bean.getStartTotalMinutes() > totalMinutes) { Double service_free = Double.valueOf(bean.getService_free()); Double charge_free = Double.valueOf(bean.getCharge_free()); viewHolder.fenshi_info_textview.setText(String.format("%s开始 %.2f元/度", bean.getStart(), service_free + charge_free)); break; } } } else { viewHolder.fenshi_info_textview.setText(""); } viewHolder.iv_label_public.setText(point.getBelong_attribute()); viewHolder.iv_label_ground.setText("0".equals(point.getPark_location()) ? "地下" : "地上"); viewHolder.iv_label_free_park.setVisibility(point.getStop_cost().contains("免费") ? View.VISIBLE : View.GONE); if ("1".equals(point.getOwn_pay())) { viewHolder.payment_method.setText("可使用本APP扫码支付"); } else { if ("".equals(point.getCharge_cost_way2())) { viewHolder.payment_method.setText("暂无"); } else { viewHolder.payment_method.setText(point.getCharge_cost_way2()); } } viewHolder.recommend_nav.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { recommendNav(point); } }); if (point.getFast_able_num() == null && point.getSlow_able_num() == null) { viewHolder.window_tv_fast_free_label.setVisibility(View.GONE); viewHolder.window_tv_fast_total_num.setVisibility(View.GONE); viewHolder.window_tv_slow_free_label.setVisibility(View.GONE); viewHolder.window_tv_slow_total_num.setVisibility(View.GONE); viewHolder.window_tv_fast_free_num.setText("".equals(point.getFast_num()) ? "0" : point.getFast_num()); viewHolder.window_tv_slow_free_num.setText("".equals(point.getSlow_num()) ? "0" : point.getSlow_num()); } else { viewHolder.window_tv_fast_free_label.setVisibility(View.VISIBLE); viewHolder.window_tv_fast_total_num.setVisibility(View.VISIBLE); viewHolder.window_tv_slow_free_label.setVisibility(View.VISIBLE); viewHolder.window_tv_slow_total_num.setVisibility(View.VISIBLE); viewHolder.window_tv_fast_free_num.setText(point.getFast_able_num()); viewHolder.window_tv_slow_free_num.setText(point.getSlow_able_num()); viewHolder.window_tv_fast_total_num.setText("".equals(point.getFast_num()) ? "0" : "/" + point.getFast_num()); viewHolder.window_tv_slow_total_num.setText("".equals(point.getSlow_num()) ? "0" : "/" + point.getSlow_num()); } } private void showStarInfoView(ViewHolder viewHolder, RecommendZhan point) { String starStr = point.getStar(); double star = 0.0; try { star = Double.parseDouble(starStr); } catch (NumberFormatException e) { e.printStackTrace(); } viewHolder.score_text.setText(String.format("%.1f分", star)); if (star == 0) { viewHolder.score_img.setImageDrawable(getDrawable(R.drawable.icon_0xing)); viewHolder.score_text.setText("暂无评分"); } else if (star > 0 && star < 1) { viewHolder.score_img.setImageDrawable(getDrawable(R.drawable.icon_05xing)); } else if (star >= 1 && star < 1.5) { viewHolder.score_img.setImageDrawable(getDrawable(R.drawable.icon_1xing)); } else if (star >= 1.5 && star < 2) { viewHolder.score_img.setImageDrawable(getDrawable(R.drawable.icon_15xing)); } else if (star >= 2 && star < 2.5) { viewHolder.score_img.setImageDrawable(getDrawable(R.drawable.icon_2xing)); } else if (star >= 2.5 && star < 3) { viewHolder.score_img.setImageDrawable(getDrawable(R.drawable.icon_25xing)); } else if (star >= 3 && star < 3.5) { viewHolder.score_img.setImageDrawable(getDrawable(R.drawable.icon_3xing)); } else if (star >= 3.5 && star < 4) { viewHolder.score_img.setImageDrawable(getDrawable(R.drawable.icon_35xing)); } else if (star >= 4 && star < 4.5) { viewHolder.score_img.setImageDrawable(getDrawable(R.drawable.icon_4xing)); } else if (star >= 4.5 && star < 5) { viewHolder.score_img.setImageDrawable(getDrawable(R.drawable.icon_45xing)); } else { viewHolder.score_img.setImageDrawable(getDrawable(R.drawable.icon_5xing)); } } } @Override protected void onPause() { super.onPause(); MobclickAgent.onPause(this); } @Override protected void onResume() { super.onResume(); MobclickAgent.onResume(this); } @Override protected void onDestroy() { super.onDestroy(); InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); if (imm.isActive()) { View view = getWindow().peekDecorView(); if (view != null) { imm.hideSoftInputFromWindow(view.getWindowToken(), 0); } } } /** * 开始进行poi搜索 */ protected void doSearchQuery() { currentPage = 0; query = new PoiSearch.Query(keyWord, "", MainApplication.atCity);// 第一个参数表示搜索字符串,第二个参数表示poi搜索类型,第三个参数表示poi搜索区域(空字符串代表全国) query.setPageSize(10);// 设置每页最多返回多少条poiitem query.setPageNum(currentPage);// 设置查第一页 poiSearch = new PoiSearch(this, query); poiSearch.setOnPoiSearchListener(this); poiSearch.searchPOIAsyn(); } private void doPointNameSearchQuery() { double longitude = 0; double latitude = 0; if (MainApplication.center != null) { longitude = MainApplication.center.longitude; latitude = MainApplication.center.latitude; } LatLng center = new LatLng(latitude, longitude); String url = MainApplication.url + "/zhannew/basic/web/index.php/name_search?city=" + MainApplication.atCity + "&poi_jing=" + longitude + "&poi_wei=" + latitude + "&version=" + MainApplication.current_code + "&zhan_name=" + keyWord; OkHttpUtils.get().url(url).build().readTimeOut(30000).connTimeOut(30000).execute(new StringCallback() { @Override public void onError(Call call, Exception e) { e.printStackTrace(); } @Override public void onResponse(String response) { String rtnCode = JsonUtils.getKeyResult(response, "rtnCode"); if ("0".equals(rtnCode)) { String data = JsonUtils.getKeyResult(response, "data"); String info_decode = ""; try { info_decode = DES3S.decode(data); } catch (Exception e) { e.printStackTrace(); } if (null != info_decode && !info_decode.equals("")) { pointFullList.clear(); pointList.clear(); List<RecommendZhan> list = JsonUtils.parseToObjectList(info_decode, RecommendZhan.class); if (list != null) { for (RecommendZhan point : list) { String wei = point.getPoi_wei().trim(); String jing = point.getPoi_jing().trim(); int position_jing = jing.length() - jing.indexOf(".") - 1; int position_wei = wei.length() - wei.indexOf(".") - 1; LatLng ll; if (position_jing > 13 || position_wei > 13) { ll = new LatLng(Double.parseDouble(wei), Double.parseDouble(jing)); } else { double dwei = Double.parseDouble(wei); double djing = Double.parseDouble(jing); getGaode(djing, dwei); ll = new LatLng(Double.parseDouble(gd_wei), Double.parseDouble(gd_jing)); } double d = AMapUtils.calculateLineDistance(center, ll); point.setDistance(Util.getDistance(d)); pointFullList.add(point); } for (RecommendZhan point : pointFullList) { pointList.add(point); if (pointList.size() >= 3) { break; } } if (pointList.size() > 0) { adapter.notifyDataSetChanged(); } } } } } }); } private void getGaode(Double jing, Double wei) { double x_pi = 3.14159265358979324 * 3000.0 / 180.0; double gg_lon; double gg_lat; double x = jing - 0.0065, y = wei - 0.006; double z = Math.sqrt(x * x + y * y) - 0.00002 * Math.sin(y * x_pi); double theta = Math.atan2(y, x) - 0.000003 * Math.cos(x * x_pi); gg_lon = z * Math.cos(theta); gd_jing = String.valueOf(gg_lon); gg_lat = z * Math.sin(theta); gd_wei = String.valueOf(gg_lat); } private void recommendNav(RecommendZhan rz) { String wei = rz.getPoi_wei().trim(); String jing = rz.getPoi_jing().trim(); int position_jing = jing.length() - jing.indexOf(".") - 1; int position_wei = wei.length() - wei.indexOf(".") - 1; final LatLng ll; if (position_jing > 13 || position_wei > 13) { ll = new LatLng(Double.parseDouble(wei), Double.parseDouble(jing)); } else { double dwei = Double.parseDouble(wei); double djing = Double.parseDouble(jing); getGaode(djing, dwei); ll = new LatLng(Double.parseDouble(gd_wei), Double.parseDouble(gd_jing)); } if (!isAvilible(getApplicationContext(), "com.baidu.BaiduMap") && !isAvilible(getApplicationContext(), "com.autonavi.minimap")) { Intent intent = new Intent(getApplication(), BasicNaviActivity.class); intent.putExtra("start_jing", MainApplication.center.longitude + ""); intent.putExtra("start_wei", MainApplication.center.latitude + ""); intent.putExtra("stop_jing", ll.longitude + ""); intent.putExtra("stop_wei", ll.latitude + ""); startActivity(intent); } else { if (MainApplication.center != null) { LayoutInflater inflater1 = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE); popupWindowView = inflater1.inflate(R.layout.item_selectmap, null); popupWindow = new PopupWindow(popupWindowView, ViewGroup.LayoutParams.FILL_PARENT, ViewGroup.LayoutParams.FILL_PARENT, true); popupWindow.setBackgroundDrawable(new BitmapDrawable()); // 设置PopupWindow的弹出和消失效果 popupWindow.setAnimationStyle(R.style.popupAnimation); LinearLayout ll_tvTwo = (LinearLayout) popupWindowView.findViewById(R.id.ll_tvTwo); if (!isAvilible(getApplicationContext(), "com.autonavi.minimap")) { ll_tvTwo.setVisibility(View.GONE); } LinearLayout ll_tvOne = (LinearLayout) popupWindowView.findViewById(R.id.ll_tvOne); if (!isAvilible(getApplicationContext(), "com.baidu.BaiduMap")) { ll_tvOne.setVisibility(View.GONE); } cancleButton = (Button) popupWindowView.findViewById(R.id.cancleButton); cancleButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { popupWindow.dismiss(); } }); tvThree = (TextView) popupWindowView.findViewById(R.id.tvThree); tvThree.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Intent intent = new Intent(getApplication(), BasicNaviActivity.class); intent.putExtra("start_jing", MainApplication.center.longitude + ""); intent.putExtra("start_wei", MainApplication.center.latitude + ""); intent.putExtra("stop_jing", ll.longitude + ""); intent.putExtra("stop_wei", ll.latitude + ""); startActivity(intent); popupWindow.dismiss(); } }); tvOne = (TextView) popupWindowView.findViewById(R.id.tvOne); tvOne.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { Intent intent = null; int position_jing = rz.getPoi_jing().length() - rz.getPoi_jing().indexOf(".") - 1; int position_wei = rz.getPoi_wei().length() - rz.getPoi_wei().indexOf(".") - 1; if (position_jing > 13 || position_wei > 13) { getBaidu1(Double.parseDouble(rz.getPoi_jing()), Double.parseDouble(rz.getPoi_wei())); } else { bd_jing = Double.parseDouble(rz.getPoi_jing()); bd_wei = Double.parseDouble(rz.getPoi_wei()); } getBaidu(MainApplication.center.longitude, MainApplication.center.latitude); try { String s = "intent://map/direction?" + "origin=" + bd_lat + "," + bd_lon + "&" + "destination=" + bd_wei + "," + bd_jing + "&mode=driving&" + "src=充电桩#Intent;scheme=bdapp;package=com.baidu.BaiduMap;end"; intent = Intent.getIntent(s); } catch (URISyntaxException e) { e.printStackTrace(); } startActivity(intent); popupWindow.dismiss(); } }); tvTwo = (TextView) popupWindowView.findViewById(R.id.tvTwo); tvTwo.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { try { Intent intent4 = new Intent("android.intent.action.VIEW", android.net.Uri.parse("androidamap://route?sourceApplication=amap&slat=" + MainApplication.center.latitude + "&slon=" + MainApplication.center.longitude + "&sname=我的位置&dlat=" + ll.latitude + "&dlon=" + ll.longitude + "&dname=" + rz.getZhan_name() + "&dev=0&m=0&t=2")); intent4.setPackage("com.autonavi.minimap"); startActivity(intent4); popupWindow.dismiss(); } catch (Exception e) { e.printStackTrace(); Toast.makeText(getApplication(), "请您确认是否安装高德地图APP", Toast.LENGTH_SHORT).show(); } } }); popupWindow.showAtLocation(cancleButton, Gravity.CENTER, 0, 0); } else { Toast.makeText(getApplication(), "没有定位到您的当前位置", Toast.LENGTH_SHORT) .show(); } } } private boolean isAvilible(Context context, String packageName) { //获取packagemanager final PackageManager packageManager = context.getPackageManager(); //获取所有已安装程序的包信息 List<PackageInfo> packageInfos = packageManager.getInstalledPackages(0); //用于存储所有已安装程序的包名 List<String> packageNames = new ArrayList<String>(); //从pinfo中将包名字逐一取出,压入pName list中 if (packageInfos != null) { for (int i = 0; i < packageInfos.size(); i++) { String packName = packageInfos.get(i).packageName; packageNames.add(packName); } } //判断packageNames中是否有目标程序的包名,有TRUE,没有FALSE return packageNames.contains(packageName); } private void getBaidu(Double jing, Double wei) { double x_pi = 3.14159265358979324 * 3000.0 / 180.0; double x = jing; double y = wei; double z = Math.sqrt(x * x + y * y) + 0.00002 * Math.sin(y * x_pi); double theta = Math.atan2(y, x) + 0.000003 * Math.cos(x * x_pi); bd_lon = z * Math.cos(theta) + 0.0065; bd_lat = z * Math.sin(theta) + 0.006; } private void getBaidu1(Double jing, Double wei) { double x_pi = 3.14159265358979324 * 3000.0 / 180.0; double x = jing; double y = wei; double z = Math.sqrt(x * x + y * y) + 0.00002 * Math.sin(y * x_pi); double theta = Math.atan2(y, x) + 0.000003 * Math.cos(x * x_pi); bd_jing = z * Math.cos(theta) + 0.0065; bd_wei = z * Math.sin(theta) + 0.006; } }