1

Androidで逆ジオコーディングを使用しています。私のコードは昨日まで正常に機能していましたが、Androidデバイス(samsung S2)では機能しなくなりました。ただし、エミュレータでは機能します。デバイスでコンパイルすると、logcatに次のエラーが表示されます。

02-28 12:56:22.800: W/System.err(9048): java.io.IOException: Service not Available
02-28 12:56:22.815: W/System.err(9048):     at android.location.Geocoder.getFromLocation(Geocoder.java:136)
02-28 12:56:22.815: W/System.err(9048):     at in.wptrafficanalyzer.locationreversegeocoding.MainActivity$ReverseGeocodingTask.doInBackground(MainActivity.java:154)
02-28 12:56:22.830: W/System.err(9048):     at in.wptrafficanalyzer.locationreversegeocoding.MainActivity$ReverseGeocodingTask.doInBackground(MainActivity.java:1)
02-28 12:56:22.830: W/System.err(9048):     at android.os.AsyncTask$2.call(AsyncTask.java:264)
02-28 12:56:22.830: W/System.err(9048):     at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305)
02-28 12:56:22.835: W/System.err(9048):     at java.util.concurrent.FutureTask.run(FutureTask.java:137)
02-28 12:56:22.835: W/System.err(9048):     at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:208)
02-28 12:56:22.835: W/System.err(9048):     at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076)
02-28 12:56:22.845: W/System.err(9048):     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569)
02-28 12:56:22.845: W/System.err(9048):     at java.lang.Thread.run(Thread.java:856)
4

3 に答える 3

3

それは複数の理由によって引き起こされます。常にそれを実行するデバイスがいくつかありましたが、他のデバイスでは同じコードが正常に機能しました。

適切な回避策は、IOException をキャッチし、代わりに Google マップ Web API を起動することです。

public static JSONObject getLocationInfo(String address) {

    HttpGet httpGet = new HttpGet("http://maps.google.com/maps/api/geocode/json?address="
            + address + "&ka&sensor=false");
    HttpClient client = new DefaultHttpClient();
    HttpResponse response;
    StringBuilder stringBuilder = new StringBuilder();

    try {
        response = client.execute(httpGet);
        HttpEntity entity = response.getEntity();
        InputStream stream = entity.getContent();
        int b;
        while ((b = stream.read()) != -1) {
            stringBuilder.append((char) b);
        }
    } catch (ClientProtocolException e) {
    } catch (IOException e) {
    }

    JSONObject jsonObject = new JSONObject();
    try {
        jsonObject = new JSONObject(stringBuilder.toString());
    } catch (JSONException e) {
        e.printStackTrace();
    }

    return jsonObject;
}

このように抽出できる戻り値。

        lon = ((JSONArray) jsonObject.get("results")).getJSONObject(0)
                    .getJSONObject("geometry").getJSONObject("location").getDouble("lng");

            lat = ((JSONArray) jsonObject.get("results")).getJSONObject(0)
                    .getJSONObject("geometry").getJSONObject("location").getDouble("lat");
于 2013-02-28T07:41:26.813 に答える
3

これは既知の問題です。可能な回避策は、デバイスを再起動する必要があることです。私は再び働くと言われました。

于 2013-02-28T07:34:12.207 に答える
1

それは今働いています...........このトリックを使用してください。

project.properties を編集するだけです

# Project target
target=Google Inc.:Google APIs:16

その理由は、Geocoder クラスが Android のコア フレームワークに存在するが、適切に機能するために Google API によって提供されるコードに依存しているためです。AVD に Google API が含まれている場合でも、プロジェクトはその特定のビルド ターゲットに対してビルドする必要があります。

于 2013-03-01T08:37:44.340 に答える