问:你好
我在我的应用程序中使用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数组中获取的所有数据进行任何操作即可。