Android Google Map错误/ Geocoder类给出错误

时间:2012-03-19 01:21:39

标签: android google-maps google-maps-api-3

我正在尝试获取某个位置的地址。但该应用程序没有显示任何内容,只有黑屏。

我查看了我的Key,Android Manifest文件。一切就绪。

package in.isuru.maps;

import java.io.IOException;
import java.util.List;
import java.util.Locale;

import com.google.android.maps.GeoPoint;
import com.google.android.maps.MapActivity;
import com.google.android.maps.MapController;
import com.google.android.maps.MapView;
import com.google.android.maps.MyLocationOverlay;
import com.google.android.maps.Overlay;

import android.app.AlertDialog;
import android.content.DialogInterface;
import android.location.Address;
import android.location.Geocoder;
import android.os.Bundle;
import android.view.MotionEvent;
import android.widget.Toast;

public class Main extends MapActivity {

MapView map;
long start;
long stop;
MyLocationOverlay compass;
MapController controller;
GeoPoint touchPoint;
int x, y;


@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    map = (MapView)findViewById(R.id.map_view_main);
    map.setBuiltInZoomControls(true);

    Touchy t = new Touchy();
    List<Overlay> overlayList = map.getOverlays();
    overlayList.add(t);

    compass = new MyLocationOverlay(Main.this, map);
    overlayList.add(compass);

    //controller = map.getController();
    //GeoPoint point = new GeoPoint(7865444, 79819940);
    //controller.animateTo(point);
    //controller.setZoom(6);
}

@Override
protected void onPause() {
    compass.disableCompass();
    super.onPause();
}

@Override
protected void onResume() {
    compass.enableCompass();
    super.onResume();
}

@Override
protected boolean isRouteDisplayed() {
    // TODO Auto-generated method stub
    return false;
}

class Touchy extends Overlay{
    public boolean onTouchEvent(MotionEvent e, MapView m){
        if(e.getAction() == MotionEvent.ACTION_DOWN){
            start = e.getEventTime();
            x = (int) e.getX();
            y = (int) e.getY();
            touchPoint = map.getProjection().fromPixels(x, y);
        }
        if(e.getAction() == MotionEvent.ACTION_UP){
            stop = e.getEventTime();
        }
        if(stop - start > 1500){
            AlertDialog alert = new AlertDialog.Builder(Main.this).create();
            alert.setTitle("Pick an Option");
            alert.setMessage("Set the Place");
            alert.setButton("Place a Pin", new DialogInterface.OnClickListener() {

                @Override
                public void onClick(DialogInterface arg0, int arg1) {

                }
            });

            alert.setButton2("Get Address", new DialogInterface.OnClickListener() {

                @Override
                public void onClick(DialogInterface arg0, int arg1) {
                    Geocoder geocoder = new Geocoder(getBaseContext(), Locale.getDefault());
                    try{
                        List<Address> address = geocoder.getFromLocation(touchPoint.getLatitudeE6()/1E6, touchPoint.getLongitudeE6() /1E6, 1);
                        if(address.size() > 0){
                            String display = "";
                            for(int i = 0; i < address.get(0).getMaxAddressLineIndex(); i++){

                                display += address.get(0).getAddressLine(i) + "\n";
                            }

                            Toast t = Toast.makeText(getBaseContext(), display, Toast.LENGTH_LONG);
                            t.show();
                        }
                    } catch (IOException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }finally{

                    }
                }
            });

            alert.setButton3("Place a Pin", new DialogInterface.OnClickListener() {

                @Override
                public void onClick(DialogInterface arg0, int arg1) {

                }
            });


            alert.show();
            return true;
        }

        return false;
    }
}
}

的AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="in.isuru.maps"
android:versionCode="1"
android:versionName="1.0" >

<uses-sdk android:minSdkVersion="8" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
<uses-permission android:name="android.permission.INTERNET"/>

<application
    android:icon="@drawable/ic_launcher"
    android:label="@string/app_name" >
    <uses-library android:name="com.google.android.maps" android:required="true"/>
    <activity
        android:name=".Main"
        android:label="@string/app_name" >
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
</application>

</manifest>

我尝试通过模拟器控件添加假经度和纬度,但它也没有显示任何内容。

1 个答案:

答案 0 :(得分:3)

由于Geocoder类,我认为错误不是谷歌地图的问题。

请使用实际设备尝试您的代码,而不是在模拟器中,我相信它会起作用。

因为它发现Geocoder类在模拟器中不能很好地工作。