【问题标题】:plot marker in googlemap from json data android来自json数据android的googlemap中的绘图标记
【发布时间】:2015-03-30 21:49:35
【问题描述】:

我想通过网络服务以 json 格式从我的数据库中获取我的位置,并在 googlemap 中绘制标记。我已经开发了这段代码。当我调试它时,我可以看到已解析的数据,但我在添加标记时出错。 在此处发布之前,我已经查看了所有类似的问题。 这是我的代码,我想知道问题出在哪里。

public class MyLocation extends Fragment{
public MyLocation(){}private GoogleMap mGoogleMap;private String urlnearby="http://myserver/api/relations/relations_nearby/latitude/48.8633216/longitude/2.337843399999997";
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {

    View view = inflater.inflate(R.layout.mylocation, container, false);

    int status = GooglePlayServicesUtil.isGooglePlayServicesAvailable(getActivity().getBaseContext());

    if(status!= ConnectionResult.SUCCESS){ // Google Play Services are not available

        int requestCode = 10;
        Dialog dialog = GooglePlayServicesUtil.getErrorDialog(status, getActivity(), requestCode);
        dialog.show();

    }


        SupportMapFragment fm = (SupportMapFragment) getChildFragmentManager().findFragmentById(R.id.map);
        mGoogleMap = fm.getMap();


        if (mGoogleMap != null) {
            LocationManager service = (LocationManager) getActivity().getSystemService(Context.LOCATION_SERVICE);
            boolean enabledGPS = service
                    .isProviderEnabled(LocationManager.GPS_PROVIDER);
            boolean enabledWiFi = service.isProviderEnabled(LocationManager.NETWORK_PROVIDER);

            if (!enabledGPS) {
                Toast.makeText(getActivity(), "GPS signal not found", Toast.LENGTH_LONG).show();
                Intent intent = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS);
                startActivity(intent);
            }
        }

    new NearbyAsyncTask().execute(urlnearby);
    return view;
}

class NearbyAsyncTask extends AsyncTask<String, Void, Boolean> {

    ProgressDialog dialog;

    @Override
    protected void onPreExecute() {
        super.onPreExecute();
        dialog = new ProgressDialog(getActivity());
        dialog.setMessage("Loading, please wait");
        dialog.setTitle("Connecting server");
        dialog.show();
        dialog.setCancelable(false);
    }

    @Override
    protected void onPostExecute(Boolean result) {
        super.onPostExecute(result);
        dialog.cancel();

        if (result == false){
            //show a msg to user that data not parsed
            Toast.makeText(getActivity().getApplicationContext(), "Unable to fetch data from server", Toast.LENGTH_LONG).show();
        }
    }

    @Override
    protected Boolean doInBackground(String... params) {

        try {
            HttpClient client = new DefaultHttpClient();
            HttpGet get = new HttpGet(params[0]);
            HttpResponse response = client.execute(get);

            int status = response.getStatusLine().getStatusCode();
            if(status ==200){
                //get the response and pars it
                HttpEntity entity = response.getEntity();
                String data = EntityUtils.toString(entity);
                JSONObject jObj = new JSONObject(data);
                JSONArray jArray = jObj.getJSONArray("nearby");
                for(int i=0;i<jArray.length();i++ ){
                   JSONObject jRealObject = jArray.getJSONObject(i);

                   String title = jRealObject.getString("title");
                  String img =  jRealObject.getString("image");
                  String lat=  jRealObject.getString("latitude");
                   String lng= jRealObject.getString("longitude");

                  double  latitude=Double.parseDouble(lat);
                    double longitude= Double.parseDouble(lng);
                   MarkerOptions near = new MarkerOptions().position(new LatLng(latitude,longitude)).title(title);
                    mGoogleMap.addMarker(near);

                }

                return true; //verifie the parse
            }

        }catch (ClientProtocolException e) {
            e.printStackTrace();
        }
        catch (IOException e) {
            e.printStackTrace();
        }
        catch (JSONException e) {
            e.printStackTrace();
        }
        //http call
        return false;
    }
}

}

【问题讨论】:

    标签: json google-maps android-asynctask


    【解决方案1】:

    您需要重构代码才能正常工作。

    您需要将您的异步任务返回一个包含您需要的数据的对象放在 onPostExecute 函数中。

    然后,在活动中,您创建一个函数来加载从异步任务返回的标记。

    你可以看到一个使用异步任务的好例子here

    【讨论】:

    • 你有结果了吗?还有其他问题吗?
    • 对不起,我今天早上刚试过,它工作得很好,谢谢,但我让异步任务返回一个列表,因为我想要更多信息。
    • 我想在信息窗口中设置图片你知道怎么做吗?图片来自我的数据库而不是谷歌地图
    • 如果这个问题得到解决,请批准他们并提出另一个问题。在此处向我发送新问题的链接。我很乐意为您解答新问题。
    • tks... 将新问题的链接发送给我。我会尽力帮助你
    猜你喜欢
    • 1970-01-01
    • 2016-06-02
    • 2022-12-15
    • 1970-01-01
    • 2015-03-31
    • 1970-01-01
    • 2015-08-17
    • 1970-01-01
    • 2015-06-08
    相关资源
    最近更新 更多