2012-03-19 24 views
0

我想獲取一個位置的地址。但該應用程序不顯示任何內容,只有黑屏。安卓谷歌地圖錯誤/地理編碼器類給錯誤

我檢查了我的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> 

我試圖通過仿真器控件添加假的經度和緯度,但它並沒有顯示出任何東西。

回答

3

我認爲這個錯誤並不是谷歌地圖的一個問題,因爲Geocoder類。

請嘗試您的代碼與實際設備,而不是在模擬器,我相信它會工作。

由於它發現Geocoder類在模擬器中不能很好地工作。