1

解決方法がわからないという問題に直面しています。組み込みの 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がありますか?? 非表示でデバイス上で利用できないサービスがいくつかあるかもしれません (アラートを入力して、ユーザーがいくつかのサービスをオンにできるようにする必要があるかもしれません)?? PS 位置情報サービスはすべてのデバイスで実行されていました。どうか、あなたの助けが必要です。

4

1 に答える 1

0

この問題は以前に Google に報告されており、Geocoder がいくつかのデバイスで動作せず、電話を再起動することをお勧めします。

また、逆ジオコーディングを使用することもできます。必要なものはすべてここにあります

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

于 2013-07-01T05:11:29.173 に答える