zoukankan      html  css  js  c++  java
  • 高德地图应用——与云图后台交互

    用途:

    在高德地图中查看已存在的兴趣点信息,并上报GPS位置错误。

    准备工作:
    是在高德申请开发账号,建立一个云图。(过程略。)
    _name字段作为唯一标示。
    云图的表增加一个字段reportid,用以辨别是哪个终端上报的位置信息,防止重复上报。


    主要代码:
    1.开启GPS定位:

    private void initgps() {
    myLocation.setText("开始定位...");
    locationManager = LocationManagerProxy.getInstance(PoiActivity.this);
    // API定位采用GPS定位方式,第一个参数是定位provider,第二个参数时间最短是2000毫秒,第三个参数距离间隔单位是米,第四个参数是定位监听者
    // locationManager.requestLocationUpdates(
    // LocationManagerProxy.GPS_PROVIDER, 2000, 10, this);
    locationManager.requestLocationData(LocationManagerProxy.GPS_PROVIDER,
    2000, 10, this);
    }

    2.关闭GPS定位:

    private void stopgps() {
    myLocation.setText("定位停止");
    locationisok = false;
    if (locationManager != null) {
    locationManager.removeUpdates(this);
    }
    locationManager = null;
    }

    3.获取当前GPS信息

    /**
    * gps定位回调方法
    */
    @Override
    public void onLocationChanged(AMapLocation location) {
    if (location != null) {
    Double geoLat = location.getLatitude();
    Double geoLng = location.getLongitude();
    this.lat = geoLat;
    this.lng = geoLng;
    
    
    String str = ("定位成功:(" + geoLng + "," + geoLat + ")"
    + "
    精 度 :" + location.getAccuracy() + "米"
    + "
    定位方式:" + location.getProvider() + "
    定位时间:" + AMapUtil
    .convertToTime(location.getTime()));
    myLocation.setText(str);
    thisplocation = geoLng + "," + geoLat;
    locationisok = true;
    } else {
    locationisok = false;
    }
    }

    4.获取手机串号作为reportid

    private String getimei() {
    String is = null;
    try {
    TelephonyManager telephonyManager = (TelephonyManager) cx
    .getSystemService(Context.TELEPHONY_SERVICE);
    is = telephonyManager.getDeviceId();
    } catch (Exception e) {
    is = "";
    }
    return is;
    }

    5.查询是否重复HttpGet方法

    public int checkexist(String sname, String srid) {
    // String sname 兴趣点名称, String srid 电话IMEI
    String BASEURL = "http://yuntuapi.amap.com/datamanage/data/list?key=你的KEY"
    + "limit=10&page=1&filter=";
    String LASTURL = "&tableid=你的tableid";
    String asks = "";
    // 检查IMEI是否为空
    srid.replaceAll(" ", "");
    if (srid == null || srid.length() <= 0) {
    asks = "_name:" + sname;
    } else {
    asks = "_name:" + sname + "+reportid:" + srid;
    }
    ;
    
    String countid = "10";// 未成功获取信息,返回>1的数值供判断。
    try {
    // 创建一个HttpClient对象
    HttpClient httpclient = new DefaultHttpClient();
    HttpGet request = new HttpGet(BASEURL + asks + LASTURL);
    request.addHeader("Accept", "text/json");
    // JSON的解析过程
    HttpResponse response = httpclient.execute(request);
    // 获取HttpEntity
    HttpEntity entity = response.getEntity();
    int code = response.getStatusLine().getStatusCode();
    if (code == 200) {
    // 获取响应的结果信息
    String json = EntityUtils.toString(entity, "UTF-8");
    // JSON的解析过程
    if (json != null) {
    JSONObject jsonObject = new JSONObject(json);
    countid = jsonObject.get("count").toString();
    testcount = countid;
    testinfo = jsonObject.get("info").toString();
    }
    }
    
    } catch (ClientProtocolException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    } catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    } catch (JSONException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }
    return Integer.valueOf(countid).intValue();
    }
    
    
    
    6.上报GPS位置信息HttpPost方法
    private boolean postreport(String sname, String sid, String slocation) {
    String BASEURL = "http://yuntuapi.amap.com/datamanage/data/create?";
    String KEYS = "你的KEY";
    String TID = "你的tableid";
    
    try {
    HttpClient httpclient = new DefaultHttpClient();
    String uri = BASEURL;//
    HttpPost httppost = new HttpPost(uri);
    httppost.addHeader("Content-Type",
    "application/x-www-form-urluncoded");
    
    JSONObject obj = new JSONObject();
    obj.put("_name", sname);
    obj.put("_location", slocation);
    obj.put("reportid", sid);
    
    List<NameValuePair> formparams = new ArrayList<NameValuePair>();
    formparams.add(new BasicNameValuePair("key", KEYS));
    formparams.add(new BasicNameValuePair("tableid", TID));
    formparams.add(new BasicNameValuePair("data", obj.toString()));
    UrlEncodedFormEntity uefEntity;
    
    uefEntity = new UrlEncodedFormEntity(formparams, "UTF-8");
    httppost.setEntity(uefEntity);
    
    HttpResponse response;
    response = httpclient.execute(httppost);
    // 检验状态码,如果成功接收数据
    int code = response.getStatusLine().getStatusCode();
    if (code == 200) {
    String rev = EntityUtils.toString(response.getEntity());// 返回json格式:
    obj = new JSONObject(rev);
    String infos = obj.getString("info");
    String stats = obj.getString("status");
    if (infos.equals("OK")) {
    return true;
    }
    }
    } catch (ClientProtocolException e) {
    } catch (IOException e) {
    } catch (Exception e) {
    }
    return false;
    }
     


    7.更新界面线程

    private class Asynpost extends AsyncTask<Void, Void, String> {
    private final String TAG = "dopost";
    
    // onPreExecute方法在execute()后执行
    @Override
    protected void onPreExecute() {
    Log.i(TAG, "onPreExecute() enter");
    postisok = false;
    }
    
    // onCancelled方法用于取消Task执行,更新UI
    @Override
    protected void onCancelled() {
    Log.i(TAG, "onCancelled() called");
    postisok = false;
    }
    
    @Override
    protected void onPostExecute(String result) {
    // mPoiTextView.setText(result);
    dissmissProgressDialog();
    if (result.equals("true")) {
    Toast.makeText(cx, "您的信息已成功提交", Toast.LENGTH_LONG)
    .show();
    }else if (result.equals("false")) {
    Toast.makeText(cx, "您的信息提交失败,原因是:您已经提交过信息。",
    Toast.LENGTH_LONG).show();
    }else if (result.equals("error")){
    Toast.makeText(cx, "您的信息提交失败,原因是:可能是网络问题,",
    Toast.LENGTH_LONG).show();
    };
    }
    
    @Override
    protected String doInBackground(Void... arg0) {
    // TODO Auto-generated method stub
    String rr = "";
    if (checkexist(thispname, repid) == 0) {
    if (postreport(thispname, repid, thisplocation)){
    postisok = true;
    rr = "true";    
    }else{
    postisok = false;
    rr = "error";    
    };
    
    } else {
    postisok = false;
    rr = "false";
    }
    return rr;
    }
    
    }
  • 相关阅读:
    Django对静态文件的处理——部署阶段
    使用Django来处理对于静态文件的请求
    Django1.7如何配置静态资源访问
    Spring WebSocket中403错误解决
    FastJSON JSONObject 字段排序 Feature.OrderedField
    国际化(i18n) 各国语言缩写
    【转】java.io.Closeable接口
    【转】spring bean 卸载
    This content should also be served over HTTPS
    Failed to close the ServletOutputStream connection cleanly, Broken pipe
  • 原文地址:https://www.cnblogs.com/happyhills/p/4308070.html
Copyright © 2011-2022 走看看