谷歌地图上添加多个标记V2使用凌空 [英] Add multiple marker on google map v2 using volley
问题描述
我知道我站在正确的地方要问我的案例研究的帮助,然后在几天我在想是否可以使用存储库凌空数据MapFragment但遗憾的是到现在为止,我不能找到解决办法。使用AsycnTask(如果我错了,请教我)一般MapFragment。为什么我用排枪库,因为全功率GET / POST数据的客户端服务器。可以请你给我一些线索或执行如何解决我的问题。在此先感谢
公共类MapTestFragment扩展片段{ 私有静态最后弦乐TAG = MapTestFragment.class.getSimpleName();
私有静态最终字符串URL =myurl; 私人列表< MapEntity> mbList =新的ArrayList< MapEntity>();
私人GoogleMap的GoogleMap的;
静态最终经纬度位置=新的经纬度(-1.782877,90.381806);
标记标志;
私人MapTestAdapter适配器;
私人的HashMap<标记,MapEntity> mMarkersHashMap; @覆盖
公共查看onCreateView(LayoutInflater充气器,容器的ViewGroup,
捆绑savedInstanceState){
// TODO自动生成方法存根
查看rootView = inflater.inflate(R.layout.fragment_map,集装箱,FALSE); getLatLang();
mMarkersHashMap =新的HashMap<标记,MapEntity>();
尝试{
//载入地图
initilizeMap();
plotMarkers(mbList); }赶上(例外五){
e.printStackTrace();
}
返回rootView;
} 私人无效getLatLang(){
JsonArrayRequest马preQ =新JsonArrayRequest(URL,
新Response.Listener< JSONArray>(){ @覆盖
公共无效onResponse(JSONArray响应){
// TODO自动生成方法存根
Log.d(TAG,response.toString());
的for(int i = 0; I< response.length();我++){
尝试{
JSONObject的OBJ = response.getJSONObject(I)
MapEntity MB =新MapEntity(); mb.setTitle(obj.getString(标题));
mb.setLat(((号码)obj.get(纬度))
.doubleValue());
mb.setLang(((号码)obj.get(郎))
.doubleValue());
mb.setThumbnail(obj.getString(缩略图)); mbList.add(MB); }赶上(例外五){
// TODO:处理异常
e.printStackTrace();
}
}
adapter.notifyDataSetChanged();
}
},新Response.ErrorListener(){ @覆盖
公共无效onErrorResponse(VolleyError错误){
// TODO自动生成方法存根
VolleyLog.d(TAG,错误:+ error.getMessage());
}
});
。AppController.getInstance()addToRequestQueue(MA preQ); } 私人无效initilizeMap(){
如果(GoogleMap的== NULL){
GoogleMap的=((MapFragment)getActivity()。getFragmentManager()
.findFragmentById(R.id.map))的GetMap()。 如果(GoogleMap的!= NULL){
googleMap.setOnMarkerClickListener(新GoogleMap.OnMarkerClickListener(){ @覆盖
公共布尔onMarkerClick(标记标记){
// TODO自动生成方法存根
marker.showInfoWindow();
返回true;
}
});
}
其他{
Toast.makeText(getActivity(),
对不起!无法创建地图,Toast.LENGTH_SHORT)
。显示();
}
}
} @覆盖
公共无效onResume(){
super.onResume();
initilizeMap();
} 私人无效plotMarkers(列表< MapEntity> mbList)
{
如果(mbList.size()大于0)
{
对于(MapEntity myMarker:mbList2)
{ //创建自定义图标和其他选项的用户标记
的MarkerOptions markerOption =新的MarkerOptions()。
位置(经纬度新(myMarker.getLat()
myMarker.getLang()));
markerOption.icon(BitmapDescriptorFactory。
fromResource(R.drawable.ic_launcher)); 标记currentMarker = googleMap.addMarker(markerOption);
mMarkersHashMap.put(currentMarker,myMarker); //googleMap.setInfoWindowAdapter(new MarkerInfoWindowAdapter());
}
}
}
}
公共类MapTestAdapter延伸BaseAdapter { 私人活动活动;
私人LayoutInflater吹气;
私人列表< MapEntity> mapItems;
私人TextView的tvTitle,tvLat,tvLang; ImageLoader的ImageLoader的= AppController.getInstance()getImageLoader()。 公共MapTestAdapter(活动活动,
清单< MapEntity> mapItems){
超();
this.activity =活动;
this.mapItems = mapItems; } @覆盖
公众诠释的getCount(){
// TODO自动生成方法存根
返回mapItems.size();
} @覆盖
公共对象的getItem(INT位置){
// TODO自动生成方法存根
返回mapItems.get(位置);
} @覆盖
众长getItemId(INT位置){
// TODO自动生成方法存根
返回的位置;
} @覆盖
公共查看getView(INT位置,查看convertView,父母的ViewGroup){
// TODO自动生成方法存根 如果(吹气== NULL)
吹气=(LayoutInflater)
activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
如果(convertView == NULL)
convertView = inflater.inflate(R.layout.fragment_map_custom_marker,NULL);
如果(ImageLoader的== NULL)
ImageLoader的= AppController.getInstance()getImageLoader()。 tvTitle =(TextView中)convertView.findViewById(R.id.txtTitleMarker);
tvLat =(TextView中)convertView.findViewById(R.id.txtLatMarker);
tvLang =(TextView中)convertView.findViewById(R.id.txtLangMarker); NetworkImageView imageshow =(NetworkImageView)
convertView.findViewById(R.id.markerthumnail); 最后MapBerau MB = mapItems.get(位置); tvTitle.setText(mb.getTitle());
tvLat.setText(将String.valueOf(mb.getLat()));
tvLang.setText(将String.valueOf(mb.getLang()));
imageshow.setImageUrl(mb.getThumbnail(),ImageLoader的); 返回convertView;
}
}
要放置多个标记与尝试以下code:
私人的HashMap<标记,HashMap的<字符串,字符串>> markerHashMap;
markerHashMap =新的HashMap<标记,HashMap的<字符串,字符串>>();//这里,我的数据格式的ArrayList<&HashMap的LT;字符串,字符串>取代;
的for(int i = 0; I<您DATA.size();我++){
最终的HashMap<字符串,字符串>属于MapData = YOURDATA.get(ⅰ);
如果(mapData.get(纬度)修剪()长度()方式> 0&放大器;&放大器; mapData.get(经度)修剪()长度()方式> 0){
placeMarker(属于MapData);
}
}
// placeMarker()方法:
私人无效placeMarker(最终的HashMap<字符串,字符串>属于MapData){
私人标记标记;
尝试{
标记= googleMap.addMarker(新的MarkerOptions()图标(
BitmapDescriptorFactory.fromBitmap(BitmapFactory.de codeResource(getResources(),R.drawable.YOUR标记图像)))。位置(
新经纬度(Double.parseDouble(mapData.get(纬度)),Double.parseDouble(mapData.get(经度)))));
markerHashMap.put(标记,属于MapData); }赶上(例外五){
e.printStackTrace();
} }
I know I stand in the right place to ask help about my case study, and then in several day I was thinking about Is it possible to Storing data to MapFragment using Volley Library but unfortunately until now I can't found solution. Generally MapFragment using AsycnTask (if I'm wrong please teach me). why I use Volley Library because full power to get/post data client server. could you kindly give me some clue or implementation how to solve my problem. Thanks in advance
public class MapTestFragment extends Fragment {
private static final String TAG = MapTestFragment.class.getSimpleName();
private static final String url = "myurl";
private List<MapEntity> mbList = new ArrayList<MapEntity>();
private GoogleMap googleMap;
static final LatLng Location = new LatLng(-1.782877, 90.381806);
Marker mark;
private MapTestAdapter adapter;
private HashMap<Marker, MapEntity> mMarkersHashMap;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// TODO Auto-generated method stub
View rootView = inflater.inflate(R.layout.fragment_map, container, false);
getLatLang();
mMarkersHashMap = new HashMap<Marker, MapEntity>();
try {
// Loading map
initilizeMap();
plotMarkers(mbList);
} catch (Exception e) {
e.printStackTrace();
}
return rootView;
}
private void getLatLang() {
JsonArrayRequest mapReq = new JsonArrayRequest(url,
new Response.Listener<JSONArray>() {
@Override
public void onResponse(JSONArray response) {
// TODO Auto-generated method stub
Log.d(TAG, response.toString());
for (int i = 0; i < response.length(); i++) {
try {
JSONObject obj = response.getJSONObject(i);
MapEntity mb = new MapEntity();
mb.setTitle(obj.getString("title"));
mb.setLat(((Number) obj.get("lat"))
.doubleValue());
mb.setLang(((Number) obj.get("lang"))
.doubleValue());
mb.setThumbnail(obj.getString("thumbnail"));
mbList.add(mb);
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
}
adapter.notifyDataSetChanged();
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
// TODO Auto-generated method stub
VolleyLog.d(TAG, "Error: " + error.getMessage());
}
});
AppController.getInstance().addToRequestQueue(mapReq);
}
private void initilizeMap() {
if (googleMap == null) {
googleMap = ((MapFragment) getActivity().getFragmentManager()
.findFragmentById(R.id.map)).getMap();
if (googleMap != null) {
googleMap.setOnMarkerClickListener(new GoogleMap.OnMarkerClickListener() {
@Override
public boolean onMarkerClick(Marker marker) {
// TODO Auto-generated method stub
marker.showInfoWindow();
return true;
}
});
}
else {
Toast.makeText(getActivity(),
"Sorry! unable to create maps", Toast.LENGTH_SHORT)
.show();
}
}
}
@Override
public void onResume() {
super.onResume();
initilizeMap();
}
private void plotMarkers(List<MapEntity> mbList)
{
if(mbList.size() > 0)
{
for (MapEntity myMarker : mbList2)
{
// Create user marker with custom icon and other options
MarkerOptions markerOption = new MarkerOptions().
position(new LatLng(myMarker.getLat(),
myMarker.getLang()));
markerOption.icon(BitmapDescriptorFactory.
fromResource(R.drawable.ic_launcher));
Marker currentMarker = googleMap.addMarker(markerOption);
mMarkersHashMap.put(currentMarker, myMarker);
//googleMap.setInfoWindowAdapter(new MarkerInfoWindowAdapter());
}
}
}
}
public class MapTestAdapter extends BaseAdapter {
private Activity activity;
private LayoutInflater inflater;
private List<MapEntity> mapItems;
private TextView tvTitle, tvLat, tvLang;
ImageLoader imageLoader = AppController.getInstance().getImageLoader();
public MapTestAdapter(Activity activity,
List<MapEntity> mapItems ) {
super();
this.activity = activity;
this.mapItems = mapItems;
}
@Override
public int getCount() {
// TODO Auto-generated method stub
return mapItems.size();
}
@Override
public Object getItem(int position) {
// TODO Auto-generated method stub
return mapItems.get(position);
}
@Override
public long getItemId(int position) {
// TODO Auto-generated method stub
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
// TODO Auto-generated method stub
if (inflater == null)
inflater = (LayoutInflater)
activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
if (convertView == null)
convertView = inflater.inflate(R.layout.fragment_map_custom_marker, null);
if (imageLoader == null)
imageLoader = AppController.getInstance().getImageLoader();
tvTitle = (TextView) convertView.findViewById(R.id.txtTitleMarker);
tvLat = (TextView) convertView.findViewById(R.id.txtLatMarker);
tvLang = (TextView) convertView.findViewById(R.id.txtLangMarker);
NetworkImageView imageshow = (NetworkImageView)
convertView.findViewById(R.id.markerthumnail);
final MapBerau mb = mapItems.get(position);
tvTitle.setText(mb.getTitle());
tvLat.setText(String.valueOf(mb.getLat()));
tvLang.setText(String.valueOf(mb.getLang()));
imageshow.setImageUrl(mb.getThumbnail(), imageLoader);
return convertView;
}
}
To place multiple marker try with below code:
private HashMap<Marker, HashMap<String, String>> markerHashMap;
markerHashMap = new HashMap<Marker, HashMap<String, String>>();
//Here, my data format is ArrayList<HashMap<String, String>>;
for (int i = 0; i < YOUR DATA.size(); i++) {
final HashMap<String, String> mapData = YOURDATA.get(i);
if (mapData.get("latitude").trim().length() > 0 && mapData.get("longitude").trim().length() > 0) {
placeMarker(mapData);
}
}
//placeMarker() method:
private void placeMarker(final HashMap<String, String> mapData) {
private Marker marker;
try {
marker=googleMap.addMarker(new MarkerOptions().icon(
BitmapDescriptorFactory.fromBitmap(BitmapFactory.decodeResource(getResources(), R.drawable.YOUR MARKER IMAGE))).position(
new LatLng(Double.parseDouble(mapData.get("latitude")), Double.parseDouble(mapData.get("longitude")))));
markerHashMap.put(marker, mapData);
} catch (Exception e) {
e.printStackTrace();
}
}
这篇关于谷歌地图上添加多个标记V2使用凌空的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!