Geocoder失败 - 有时会返回null数组

时间:2013-07-01 04:49:15

标签: android geocoding

我遇到了一个问题,我不知道如何解决。我有一个应用程序,它使用内置的android地址解析器。代码很简单 - 我正在获取地址和坐标以在地图上显示它们。在模拟器上,它运行得很好,但在所有真实设备上应用程序崩溃,试图获取一些地址(地理编码器返回null数组)。 这是代码:

    @Override
    protected List<Address> doInBackground(String... params) {
        Log.d(TAG, "doinbackground SetRightMapDisplayAddress started");
        long startTime= System.currentTimeMillis();
        long threadId = Thread.currentThread().getId();
        Log.d(TAG, String.format("The thread id is: %d", threadId));
        context = getActivity();

        String placeName = params[0];
        List<Address> addressList = downloadData.findAddressesByName(context, placeName);
        int returnedAddresses = addressList.size();

        Log.d(TAG, String.valueOf(returnedAddresses));
        long endTime = System.currentTimeMillis();
        Log.d(TAG, String.valueOf(startTime-endTime));
        Log.d(TAG, "doinbackground SetRightMapDisplayAddress ended");
        return addressList;
    }

例外(它指向这一行:

int returnedAddresses = addressList.size();

):

07-01 15:41:58.509: ERROR/AndroidRuntime(9158): FATAL EXCEPTION: AsyncTask #3
        java.lang.RuntimeException: An error occured while executing doInBackground()
        at android.os.AsyncTask$3.done(AsyncTask.java:278)
        at java.util.concurrent.FutureTask$Sync.innerSetException(FutureTask.java:273)
        at java.util.concurrent.FutureTask.setException(FutureTask.java:124)
        at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:307)
        at java.util.concurrent.FutureTask.run(FutureTask.java:137)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569)
        at java.lang.Thread.run(Thread.java:856)
        Caused by: java.lang.NullPointerException
        at com.shop.pagerFragments.TorgCentrMapFragment$SetRightMapDisplayAddress.doInBackground(TorgCentrMapFragment.java:349)
        at com.shop.pagerFragments.TorgCentrMapFragment$SetRightMapDisplayAddress.doInBackground(TorgCentrMapFragment.java:337)
        at android.os.AsyncTask$2.call(AsyncTask.java:264)
        at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305)
        ... 4 more

我在这里读了很多,但我找不到解决方案。也许有一个web api,可以获取相同的地址列表?也许有一些服务,隐藏在设备上不可用(也许我需要填充警报并让用户打开一些服务)? 附:位置服务在所有设备上运行。拜托,伙计们,我需要你的帮助。

1 个答案:

答案 0 :(得分:0)

之前已向谷歌报告此问题,其中地理编码器无法使用少量设备,转向建议是重启手机。

此外,你可以使用反向地理编码,你会发现你需要的所有

https://developers.google.com/maps/documentation/geocoding/#ReverseGeocoding