TEL:400-8793-956
当前位置:程序、服务器

Google Map仅显示一个标记

提问者: 近期获赞: 浏览人数: 发布时间:2020-12-26 13:48:05

 问:你好

 
我在我的应用程序中使用Google Map。我添加了treeid及其lat和lng位置。我想撤消这些位置并使用排球库在Google标记中显示。
 
但是我只能得到一个标记位置,请帮助我代码出错的地方?
 
我的数据库服务器链接:http://plantnow.net16.net/googlemaplocations.php
 
我只得到treeid = 2
 
我的地图活动:
 
btMap.setOnClickListener(new View.OnClickListener(){
        @Override
        public void onClick(View view){
            字符串搜索= String.valueOf(inputSearch.getSelectedItem())。toString();
            mMap = mMapView.getMap();
            mMap.clear();
            // getSelectedLocations(search);
            Toast.makeText(getActivity()。getApplicationContext(),“ +搜索+树的位置”,Toast.LENGTH_ LONG).show();
            如果(search.equals(“所有位置”)){
                双纬= 0;
                双经= 0;
                字符串标记;
                getLocations();
                Toast.makeText(getActivity()。getApplicationContext(),“所有树的位置”,Toast.LENGTH_ LONG).show();
            }其他{
                Toast.makeText(getActivity()。getApplicationContext(),“位置不可用”,Toast.LENGTH_ LONG).show();
            }
        }
    });
    返回v;
}
     私人无效getLocations(){
    //用于取消请求的标签
    字符串标签_ string_ req =“ req_ location”;
   // pDialog.setMessage(“正在登录...”);
   // showDialog();
    StringRequest strReq =新的StringRequest(Request.Method.POST,
            AppConfig.URL&#95; MAPLOCATION,新的Response.Listener <String>(){
        @Override
        public void onResponse(String response){
            Log.d(TAG,“位置响应:” + response.toString());
            hideDialog();
            尝试{
                JSONObject jObj =新的JSONObject(response);
                布尔错误= jObj.getBoolean(“错误”);
                List <Marker>标记=新的ArrayList <Marker>();
                //检查json中的错误节点
                如果(!错误){
                    JSONObject位置= jObj.getJSONObject(“ tree”);
                    for(int i = 0; i <location.length(); i ++){
                        字符串treeid = location.getString(“ treeid”);
                        字符串treespecies = location.getString(“ treespecies”);
                        Double treelatitude = location.getDouble(“ treelatitude”);
                        Double treelongitude = location.getDouble(“ treelongitude”);
                        LatLng latlng =新的LatLng(treelatitude,treelongitude);
                        标记标记= mMap.addMarker(new MarkerOptions()。title(treeid)
                                        .position(new LatLng(treelatitude,treelongitude))
                        );
                           markers.add(marker);
                        //将CameraPosition移动到最后单击的位置
                        mMap.moveCamera(CameraUpdateFactory.newLatLng(latlng));
                        //单击在地图上的最后位置设置缩放级别
                        mMap.animateCamera(CameraUpdateFactory.newLatLng(latlng));
                        mMap.animateCamera(CameraUpdateFactory.zoomTo(2));
                    }
                    //启动主要活动
                }其他{
                    //登录错误。取得错误讯息
                    字符串errorMsg = jObj.getString(“ error&#95; msg”);
                    Toast.makeText(getActivity()。getApplicationContext(),
                            errorMsg,Toast.LENGTH&#95; LONG).show();
                }
            } catch(JSONException e){
                // JSON错误
                e.printStackTrace();
                Toast.makeText(getActivity()。getApplicationContext(),“ Json错误:” + e.getMessage(),Toast.LENGTH&#95; LONG).show();
            }
        }
    },新的Response.ErrorListener(){
        @Override
        公共无效onErrorResponse(VolleyError错误){
            Log.e(TAG,“登录错误:” + error.getMessage());
            Toast.makeText(getActivity()。getApplicationContext(),
                    error.getMessage(),Toast.LENGTH&#95; LONG).show();
            hideDialog();
        }
    }){
    };
    //将请求添加到请求队列
    AppController.getInstance()。addToRequestQueue(strReq,tag&#95; string&#95; req);
}
我的PHP代码:
 
     <?php
       define('&#95;&#95; ROOT&#95;&#95;',dirname(dirname(&#95;&#95; FILE&#95;&#95;)));; 
   require&#95once(&#95;&#95; ROOT&#95;&#95;。'/ public&#95; html / Config.php');
 //连接到mysql数据库
    $ mysqli =新的mysqli(DB&#95; HOST,DB&#95; USER,DB&#95; PASSWORD,DB&#95; DATABASE);
       // json响应数组
          $ response = array(“ error” => FALSE);
//获取Google Map Marker的树详细信息
    if($ stmt = $ mysqli-> query(“ SELECT * FROM tree where`treecondition` IN('Balanced','Healthy','Imbalance','Dangerous','Transplanted','Dieseased')”){)
 如果($ stmt-> num&#95; rows){
       while($ tree = $ stmt-> fetch&#95; assoc()){
        $ response [“错误”] =否;
        $ response [“ tree”] [“ treeid”] = $ tree ['treeid'];
        $ response [“ tree”] [“ treespecies”] = $ tree ['treespecies'];
        $ response [“ tree”] [“ treelatitude”] = $ tree ['treelatitude'];
        $ response [“ tree”] [“ treelongitude”] = $ tree ['treelongitude'];
        echo json&#95; encode($ response),'<br>';
     } 
     }其他{
     //找不到具有凭据的用户
   $ response [“ error”] = TRUE;
    “; $ response [” error&#95; msg“] =”树列表视图凭据错误。请重试!“;
   echo json&#95; encode($ response);
   }
    $ mysqli-> close();
        }
 
 
答:似乎在解析仅第一个对象是从您收到的json数组中获取问题,因此请使用以下方法进行解析
 
    公共无效requestJSONArray(最终RequestCallback回调){
 
            JsonArrayRequest req =新的JsonArrayRequest(map_url,
                    新的Response.Listener(){
                        @Override
                        公共无效onResponse(JSONArray response){
                            Log.d(TAG,response.toString());
 
                                //解析json数组响应
                                //遍历每个json对象
                                清单 json_reponse = new ArrayList <>();
                                json_reponse.clear();
                                for(int i = 0; i <response.length(); i ++){
 
                                    尝试{
                                        JSONObject json_object =(JSONObject)响应
                                                .get(i);
                                        字符串treeid = json_object.getString(“ treeid”);
                                        字符串treespecies = json_object.getString(“ treespecies”);
                                        字符串treelatitude = json_object.getString(“ treelatitude”);
                                        字符串treelongitude = json_object.getString(“ treelongitude”);
 
                                        json_reponse.add(new MapModal(treeid,treespecies,treelatitude,treelongitude));
 
                                    }捕获(异常e){e.printStackTrace();}
 
                                }
                                Log.d(TAG,“” + json_reponse.size());
    // txtResponse.setText(jsonResponse);
 
 
    // hidepDialog();
                        }
                    },新的Response.ErrorListener(){
                @Override
                公共无效onErrorResponse(VolleyError错误){
                    VolleyLog.d(TAG,“ Error:” + error.getMessage());
    // Toast.makeText(getApplicationContext(),
    // error.getMessage(),Toast.LENGTH_SHORT).show();
    // hidepDialog();
                }
            });
 
            //将请求添加到请求队列
            AppInitializer.getContext()。getVolleyRequestQueu()。add(req);
        }
 
和相同的模态类是
 
** *由amitrai在15年10月26日创建。* /
 
公共类MapModal {
 
    公共MapModal(字符串treeid,字符串treespecies,字符串treelatitude,字符串treelongitude){
        this.treeid = treeid;
        this.treespecies =树种;
        this.treelatitude = treelatitude;
        this.treelongitude =树度;
    }
 
    public String treeid,treespecies,treelatitude,treelongitude;
 
    公共字符串getTreeid(){
        返回treeid;
    }
 
    public void setTreeid(String treeid){
        this.treeid = treeid;
    }
 
    公共字符串getTreespecies(){
        返回树种
    }
 
    公共无效setTreespecies(String treespecies){
        this.treespecies =树种;
    }
 
    公共字符串getTreelatitude(){
        返回树纬度;
    }
 
    公共无效setTreelatitude(String treelatitude){
        this.treelatitude = treelatitude;
    }
 
    公共字符串getTreelongitude(){
        返回树经度;
    }
 
    公共无效setTreelongitude(String treelongitude){
        this.treelongitude =树度;
    }
 
}
 
我已经测试了所有对象都存储在列表中,现在只需创建一个for循环,直到列表的大小,然后对从json数组中获取的所有数据进行任何操作即可。
上一篇: 使用Volley库将捕获的图像上传到特定的文件夹服务器
下一篇: 请在Android中帮助设计带有附加图像的布局