android - 地理编码器的限制

标签 android geocoding

我正在构建一个 Android 应用程序,并且我正在使用 Geocoder 来解码位置,但我注意到有时当连接性相对较低时,Gecoder 无法工作。但与此同时,浏览器和其他基于互联网的应用程序仍然可以运行。有没有什么办法解决这一问题 ?这可能出了什么问题。我确实知道它是一个后端服务,但这并不重要。对于常规的 http 请求,我们可以重试并修复类似的问题,但我该如何解决这个问题?有什么建议吗?

class ReverseGeocodingTask extends AsyncTask<Double, Void, String> implements OnDismissListener{

    Context context;
    ProgressDialog progDialog;
    String progressString;

    public ReverseGeocodingTask(Context context, String progressStr) {
        this.context = context;
        this.progressString = progressStr;
        if(!isCancelled()){
            initProgDialog();
        }

    }

    void initProgDialog(){

        progDialog = new ProgressDialog(context);
        progDialog.setCanceledOnTouchOutside(false);
        progDialog.setButton(DialogInterface.BUTTON_NEGATIVE, getString(R.string.btn_cancel),new DialogInterface.OnClickListener() {
            public void onClick(final DialogInterface dialog, final int id) {
                progDialog.dismiss();
            }
        });
        progDialog.setMessage(progressString);
        progDialog.setOnDismissListener(this);
        progDialog.show();
    }


    @Override
    protected void onPreExecute() {
        //removeAllPendingRevGeocodingTasks();
        addTask(this);
        super.onPreExecute();
    }

    @Override
    protected String doInBackground(Double... params) {
        String result = null;

        if(!isCancelled()){
            Geocoder geocoder = new Geocoder(getApplicationContext(), Locale.getDefault());  
            try {
                List<Address> list = geocoder.getFromLocation(latitude, longitude, 1);

                if (list != null && list.size() > 0) {
                    Address address = list.get(0);
                    result = address.getAddressLine(0) + ", " + address.getLocality();
                }

            } catch (IOException e) {
                progDialog.dismiss();
                failedToUpdateLocation();
                Log.e("Location listener", "Failed to decode location name");
            }
        }
        return result;

    }

    @Override
    protected void onCancelled() {
        progDialog.dismiss();
        this.cancel(true);
        super.onCancelled();
    }

    @Override
    protected void onPostExecute(String result) {
        latLongInDegrees = " "+latLongInDegreesToDMSString(latitude,longitude);
        setLocationName(result);
        updateLocationName(result + latLongInDegrees);

        String progressStr=getString(R.string.msg_slp_fetch_from_geocoder_result_1)+latLongInDegreesToDMSString(latitude,longitude)+"...";
        executeSLPWebserviceTask(latitude, longitude, progressStr);
        finishedUpdatingLocation(latitude,longitude);
        progDialog.dismiss();
        super.onPostExecute(result);
        this.cancel(true);
        //removeAllPendingRevGeocodingTasks();
    }

    public void onDismiss(DialogInterface dialog) {
        this.cancel(true);
    }

}


protected void executeRevGeocoderTask(double lat, double longitude)
{
    String progressStr=getString(R.string.msg_rev_geocoder_fetch)+" "+latLongInDegreesToDMSString(lat,longitude);
    ReverseGeocodingTask task = new ReverseGeocodingTask(this,progressStr);
    task.execute(lat,longitude);
}

最佳答案

Geocoder 是一项后端服务,我们对其 http 请求或任何此类请求没有任何句柄。它需要良好的互联网连接。

关于android - 地理编码器的限制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9679144/

相关文章:

java - 包 com.google.android.gms.samples.wallet 不存在导入 com.google.android.gms.samples.wallet.Constants

android - 带有 fragment 的 PagerView

android - 为 AnalogClock 小部件动态设置可绘制对象

java - 交换按钮在android中的位置

java - Android 按钮 - 单击时触发定时事件

python - 如何将 DataFrame 分割成 block ,运行 apply(),然后重新堆叠成 1 个 DataFrame?

ios - UItableViewCell 更新错误的单元格标签文本

ruby-on-rails-3 - 地理编码器为 ip 地址返回 nil?

javascript - 谷歌地图地理编码不返回位置

javascript - 传单地理编码器按国家/地区限制结果