2014-04-17 33 views
1
  • 獲取使用地理編碼地址,我試圖讓使用緯度和經度
  • 我使用模擬器來運行該代碼,因爲我沒有設備, 當我運行位置的詳細信息代碼我得到的誤差,如圖登錄

MainActivity.java無法在Android的

public class MainActivity extends Activity { 
    double LATITUDE = 37.42233; 
    double LONGITUDE = -122.083; 

    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     Geocoder geocoder = new Geocoder(this, Locale.ENGLISH); 

     try { 
      List<Address> addresses = geocoder.getFromLocation(LATITUDE, LONGITUDE, 1); 

      if(addresses != null) { 
       Address returnedAddress = addresses.get(0); 
       StringBuilder strReturnedAddress = new StringBuilder("Address:\n"); 
       for(int i=0; i<returnedAddress.getMaxAddressLineIndex(); i++) { 
        strReturnedAddress.append(returnedAddress.getAddressLine(i)).append("\n"); 
       } 

       Log.d("RESULT",strReturnedAddress.toString()); 
      } 
      else{ 
       Log.d("NO-RESULT","NO-RESULT"); 
      } 
     } catch (IOException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
      Log.d("NO-RESULT","NO-RESULT"); 
     } 

    } 

} 

登錄::

04-17 12:50:22.489: E/AndroidRuntime(609): FATAL EXCEPTION: main 
04-17 12:50:22.489: E/AndroidRuntime(609): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.findingpresentlocation/com.example.findingpresentlocation.MainActivity}: java.lang.IndexOutOfBoundsException: Invalid index 0, size is 0 
04-17 12:50:22.489: E/AndroidRuntime(609): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1955) 
04-17 12:50:22.489: E/AndroidRuntime(609): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1980) 
04-17 12:50:22.489: E/AndroidRuntime(609): at android.app.ActivityThread.access$600(ActivityThread.java:122) 
04-17 12:50:22.489: E/AndroidRuntime(609): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1146) 
04-17 12:50:22.489: E/AndroidRuntime(609): at android.os.Handler.dispatchMessage(Handler.java:99) 
04-17 12:50:22.489: E/AndroidRuntime(609): at android.os.Looper.loop(Looper.java:137) 
04-17 12:50:22.489: E/AndroidRuntime(609): at android.app.ActivityThread.main(ActivityThread.java:4340) 
04-17 12:50:22.489: E/AndroidRuntime(609): at java.lang.reflect.Method.invokeNative(Native Method) 
04-17 12:50:22.489: E/AndroidRuntime(609): at java.lang.reflect.Method.invoke(Method.java:511) 
04-17 12:50:22.489: E/AndroidRuntime(609): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784) 
04-17 12:50:22.489: E/AndroidRuntime(609): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551) 
04-17 12:50:22.489: E/AndroidRuntime(609): at dalvik.system.NativeStart.main(Native Method) 
04-17 12:50:22.489: E/AndroidRuntime(609): Caused by: java.lang.IndexOutOfBoundsException: Invalid index 0, size is 0 
04-17 12:50:22.489: E/AndroidRuntime(609): at java.util.ArrayList.throwIndexOutOfBoundsException(ArrayList.java:251) 
04-17 12:50:22.489: E/AndroidRuntime(609): at java.util.ArrayList.get(ArrayList.java:304) 
04-17 12:50:22.489: E/AndroidRuntime(609): at com.example.findingpresentlocation.MainActivity.onCreate(MainActivity.java:30) 
04-17 12:50:22.489: E/AndroidRuntime(609): at android.app.Activity.performCreate(Activity.java:4465) 
04-17 12:50:22.489: E/AndroidRuntime(609): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1049) 
04-17 12:50:22.489: E/AndroidRuntime(609): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1919) 
04-17 12:50:22.489: E/AndroidRuntime(609): ... 11 more 

回答

1

你只檢查是否返回的列表爲空,但它可能是空的。您可以在documentation返回的列表可以爲空或空見,所以做了大小檢查,以及:

if (addresses != null && !addresses.isEmpty()) 

而且,你不應該在主線程爲此,使用例如一個AsyncTask。爲什麼解釋here

的方法是同步的,並且可能需要很長的時間來完成工作,所以 你應該叫從 的AsyncTask的doInBackground()方法中的方法。

0

List<Address> addresses不爲空,但在列表中沒有的元素,所以大小爲0,可你應該改變你的代碼是這樣的:

public class MainActivity extends Activity { 
    double LATITUDE = 37.42233; 
    double LONGITUDE = -122.083; 

    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     Geocoder geocoder = new Geocoder(this, Locale.ENGLISH); 

     try { 
      List<Address> addresses = geocoder.getFromLocation(LATITUDE, LONGITUDE, 1); 

      if(addresses != null && addresses.size() > 0) { 
       Address returnedAddress = addresses.get(0); 
       StringBuilder strReturnedAddress = new StringBuilder("Address:\n"); 
       for(int i=0; i<returnedAddress.getMaxAddressLineIndex(); i++) { 
        strReturnedAddress.append(returnedAddress.getAddressLine(i)).append("\n"); 
       } 

       Log.d("RESULT",strReturnedAddress.toString()); 
      } 
      else{ 
       Log.d("NO-RESULT","NO-RESULT"); 
      } 
     } catch (IOException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
      Log.d("NO-RESULT","NO-RESULT"); 
     } 

    } 

試圖在你的代碼中加入&& addresses.size() > 0片段。