【问题标题】:saving current location on GoogleMap V2 by JSON parser通过 JSON 解析器在 GoogleMap V2 上保存当前位置
【发布时间】:2014-07-12 12:31:10
【问题描述】:

我想将我的位置保存在数据库中, 当使用 Jason 解析器时,此错误出现在 (String name = latlng.getText().toString(); )

(对于 LatLng 类型,方法 getText() 未定义)其中 LatLng 来自 LatLng 类型

谁能解决??

protected String doInBackground(String... args) {
            String name = latlng.getText().toString();


            // Building Parameters
            List<NameValuePair> params = new ArrayList<NameValuePair>();
            params.add(new BasicNameValuePair("yout_location", name));

            // getting JSON Object
            // Note that create product url accepts POST method
            JSONObject json = jsonParser.makeHttpRequest(add_location,
                    "POST", params);

            // check log cat fro response
            Log.d("Create Response", json.toString());

            // check for success tag
            try {
                int success = json.getInt(TAG_SUCCESS);

                if (success == 1) {
                    // successfully created product
                    Intent i = new Intent(getApplicationContext(), NamesActivity.class);
                    startActivity(i);

                    // closing this screen
                    finish();
                } else {
                    // failed to create product
                }
            } catch (JSONException e) {
                e.printStackTrace();
            }

            return null;
        }

【问题讨论】:

  • 尝试使用 latLng.latitude;和 latLng.longitude;.
  • 纬度和经度都存储在 Latlng 中,我想将两者保存在一个地方。
  • 您是否需要经纬度或从这个经纬度的地方?
  • 以经纬度为坐标的地方

标签: java android json location google-maps-android-api-2


【解决方案1】:

我从事过类似的项目。

如果您尝试存储位置名称,则需要使用地理编码器将 LatLng 点转换为“formatted_address”。

如果您尝试将纬度和经度值存储在数据库中,它们是“双”数据类型,您需要将它们转换为字符串,如下所示

String lat = Double.toString(latlng.latitude);
String lng = Double.toString(latlng.longitude);

更新

将 LatLng 点传递给 asynctask 并用它替换您的代码

protected Void doInBackground(LatLng... params) {
        Log.d("Maps", "background");
        String lat = Double.toString(params[0].latitude);
        String lng = Double.toString(params[0].longitude);
        String strUrl = "http://yourdomain.com/save.php";                   
        URL url = null;
        try {
            url = new URL(strUrl);
            Log.d("Maps", "url fetch");
            HttpURLConnection connection = (HttpURLConnection) url
                    .openConnection();
            Log.d("Maps", "opened");
            connection.setRequestMethod("POST");
            connection.setDoOutput(true);
            OutputStreamWriter outputStreamWriter = new OutputStreamWriter(
                    connection.getOutputStream());

            outputStreamWriter.write("lat=" + lat + "&lng="+lng);               
            Log.d("Maps", "wrote");
            outputStreamWriter.flush();
            outputStreamWriter.close();

            InputStream iStream = connection.getInputStream();
            BufferedReader reader = new BufferedReader(new
            InputStreamReader(iStream));

            StringBuffer sb = new StringBuffer();

            String line = "";

            while( (line = reader.readLine()) != null){
                sb.append(line);
            }

            reader.close();
            iStream.close();


        } catch (MalformedURLException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }

        return null;
    }

【讨论】:

  • 好的,如果我想写两个然后将它转换成一个字符串,我该怎么做?
  • 很好,但是如果连接成功,下一个意图呢?
  • 尝试 { int 成功 = json.getInt(TAG_SUCCESS); if (success == 1) { // 成功创建产品 Intent i = new Intent(getApplicationContext(), NamesActivity.class);开始活动(一); // 关闭这个屏幕 finish();
  • 我在哪里使用进度对话框
  • 我没听明白。如果是关于其他不同的问题,请发布另一个问题。
【解决方案2】:

试试这个方法,希望能帮助你解决问题。

Geocoder geocoder = new Geocoder(context);

List<Address> list = null;
try {
   list = geocoder.getFromLocation(latlng.latitude, latlng.longitude, 1);
} catch (Throwable e) {
   e.printStackTrace();
}

String name = list.get(0).getSubAdminArea();

【讨论】:

    【解决方案3】:

    我认为您想使用纬度和经度来获取位置。您可以使用以下方法来实现。

    public  String getAddress(Context ctx, double latitude, double longitude) {
            StringBuilder result = new StringBuilder();
            try {
                Geocoder geocoder = new Geocoder(ctx, Locale.getDefault());
                List<address>
     addresses = geocoder.getFromLocation(latitude, longitude, 1);
                if (addresses.size() > 0) {
                    Address address = addresses.get(0);
    
        String locality=address.getLocality();
        String city=address.getCountryName();
        String region_code=address.getCountryCode();
        String zipcode=address.getPostalCode();
        double lat =address.getLatitude();
        double lon= address.getLongitude();
    
                    result.append(locality+" ");
                    result.append(city+" "+ region_code+" ");
        result.append(zipcode);
    
                }
            } catch (IOException e) {
                Log.e("tag", e.getMessage());
            }
    
            return result.toString();
        }
    

    要从 LatLng 对象获取纬度和经度,您可以执行以下操作:

    double lat = latlng.latitude;
    double lng = latlng.longitude;
    

    然后只需在 asynctask 中调用 getAddress() 方法,如下所示:

    private class GetCurrentPlace extends AsyncTask<string string="" void=""> {
    double lat;
    double long;
    
    GetCurrentPlace(double lat,double long)
    {
      this.lat=lat;
      this.long=long;
    }
    
      @Override
      protected String doInBackground(String... urls) {
      String address= getAddress(context, lat, long);
       return address;
      }
    
      @Override
      protected void onPostExecute(String resultString) {
       dialog.dismiss();
       result.setText(resultString);
    
      }
     }
    

    将异步任务调用为:

    new GetCurrentPlace(latlng.latitude,latlng.longitude).execute();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-01-22
      • 1970-01-01
      • 1970-01-01
      • 2022-12-11
      • 1970-01-01
      • 2018-01-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多