I retrieve several marker from database using JSON and PHP , Now I want to search marker by title and show that marker with title and hide other marker.

我使用JSON和PHP从数据库中检索了几个标记,现在我想按标题搜索标记并显示带标题的标记并隐藏其他标记。

Here is java code

这是java代码

public class MainActivity extends FragmentActivity {

    private GoogleMap googleMap;
    private List<Marker> markers = new ArrayList<>();

    // Search EditText
    EditText inputSearch;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        SupportMapFragment fragment = (SupportMapFragment) getSupportFragmentManager()
                .findFragmentById(R.id.map);
        googleMap = fragment.getMap();
        //  googleMap.setMyLocationEnabled(true);
        new RetrieveTask().execute();

        inputSearch = (EditText) findViewById(R.id.editText);

        inputSearch.addTextChangedListener(new TextWatcher() {

            @Override
            public void onTextChanged(CharSequence s, int start, int before, int count) {
                // When user changed the Text
                showMarker(s.toString());
            }


            @Override
            public void beforeTextChanged(CharSequence s, int start, int count, int after) {
                // TODO Auto-generated method stub

            }

            @Override
            public void afterTextChanged(Editable s) {
                // TODO Auto-generated method stub    

            }
        });
    }

    private void showMarker(String s) {

        for (Marker marker : markers) {

            if (marker.getTitle().equalsIgnoreCase(name)) {
                marker.setVisible(true);
                marker.showInfoWindow();
            } else {
                marker.setVisible(false);
            }
        }
    }   




    private class RetrieveTask extends AsyncTask<Void, Void, String> {
        @Override
        protected String doInBackground(Void... params) {
            String strUrl = "http://192.168.43.229/location_marker_mysql/retrieve.php";
            URL url = null;
            StringBuffer sb = new StringBuffer();

            try {
                url = new URL(strUrl);
                HttpURLConnection connection = (HttpURLConnection) url.openConnection();
                connection.connect();
                InputStream iStream = connection.getInputStream();
                BufferedReader reader = new BufferedReader(new InputStreamReader(iStream));
                String line = "";
                while ((line = reader.readLine()) != null) {
                    sb.append(line);
                }

                reader.close();
                iStream.close();

            } catch (MalformedURLException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }
            return sb.toString();
        }

        @Override
        protected void onPostExecute(String result) {
            super.onPostExecute(result);
            new ParserTask().execute(result);

       }
    }

    MarkerOptions markerOptions = new MarkerOptions();
    String name;
    LatLng latLng;
    double lat;
    double lng;

    private class ParserTask extends AsyncTask<String, Void, List<HashMap<String, String>>> {
        @Override
        protected List<HashMap<String, String>> doInBackground(String... params) {
            MarkerJSONParser markerParser = new MarkerJSONParser();
            JSONObject json = null;
            try {
                json = new JSONObject(params[0]);
            } catch (JSONException e) {
                e.printStackTrace();
            }
            List<HashMap<String, String>> markersList = markerParser.parse(json);
            return markersList;
        }

        @Override
        protected void onPostExecute(List<HashMap<String, String>> result) {
            for (int i = 0; i < result.size(); i++) {
                HashMap<String, String> hmPlace = result.get(i);
                lat = Double.parseDouble(hmPlace.get("lat"));
                lng = Double.parseDouble(hmPlace.get("lng"));
                name = hmPlace.get("name");
                String locality = hmPlace.get("locality");
                String city = hmPlace.get("city");
                latLng = new LatLng(lat, lng);
                markerOptions.position(latLng);
                markerOptions.title(name);
                markerOptions.snippet(locality + "," + city);
                markerOptions.icon(BitmapDescriptorFactory.fromResource(R.drawable.school_marker));
                markers.add(googleMap.addMarker(markerOptions));
                googleMap.moveCamera(CameraUpdateFactory.newLatLngZoom(new LatLng(24.66372, 93.90627), 8.0f));
            }
        }
    }

1 个解决方案

#1


0

You should create a HashMap for Markers.

您应该为标记创建一个HashMap。

private HashMap<Marker, AnyObject> msHashMap;

Marker mkr = mMap.addMarker(newMarkerOptions().position(latLng).title(anyobject.getPsName()));
msHashMap.put(mkr, anyobject);

Here AnyObject shall be the type of Object in which you are storing data after parsing from JSON.

这里AnyObject应该是在从JSON解析后存储数据的Object类型。

And one more input Use Volley or okHttp for REST Request Response and GSON for parsing JSON.

还有一个输入使用Volley或okHttp进行REST请求响应,使用GSON进行解析JSON。

Hope it helps..

希望能帮助到你..

更多相关文章

  1. Android全屏显示,去除标题栏和状态栏
  2. 从Wordpress API JSON响应反序列化嵌套的JSON标记和附件
  3. 包含带标记的值的XML属性文件

随机推荐

  1. Android(安卓)四大组件之BroadcastReceiv
  2. Android(安卓)View和ViewGroup
  3. 学习目录
  4. First day of android study
  5. Android View和ViewGroup的关系
  6. Android Studio 1.5 opencv开发
  7. Android(安卓)快捷键
  8. Android Java执行Shell命令
  9. Android构建工具Gradle知识1
  10. Android USB/MTP相关实现