2016-07-02 13 views
0

Hallo Ich habe eine Uhr-Methode innerhalb meiner Anwendung gemacht, die nach einer Adresse sucht, abhängig davon, was der Benutzer in den Bearbeitungstext eingegeben hat. Das funktioniert einwandfrei, stürzt aber ab, wenn ich den Suchknopf drücke, wenn der Text leer ist. Könnte irgendwas ausmachen was ich falsch machen könnte und wie ich die Situation eventuell lösen könnte.Google Maps-Adresssuche stürzt ab, wenn der Bearbeitungstext leer ist

public void onSearch(View view) { 

    EditText findLocation = (EditText) findViewById(R.id.editText); 
    String location = findLocation.getText().toString(); 
    List<Address> addressList = null; 


    if (location != null || !location.equals("")) { 


     //Geocode gecoder = new Geocoder(this) 
     //geocoder.getFromLocationName(location, 1); 
     //then add try and catch 


     Geocoder geocoder = new Geocoder(this); 
     try { 


      addressList = geocoder.getFromLocationName(location, 1); 


      //after try and catch 
      // List<Address> addressList = geocoder.getFromLocationName(location, 1); 


     } catch (IOException e) { 









      e.printStackTrace(); 


     } 
    } 

    Address address = addressList.get(0); 
    LatLng latLng = new LatLng(address.getLatitude(), address.getLongitude()); 
    mMap.addMarker(new MarkerOptions().position(latLng).title(location.toString())); 
    mMap.animateCamera(CameraUpdateFactory.newLatLng(latLng)); 


} 

Stapelüberwachung

java.lang.IllegalStateException: Could not execute method for android:onClick 
at android.view.View$DeclaredOnClickListener.onClick(View.java:4452) 
at android.view.View.performClick(View.java:5198) 
at android.view.View$PerformClick.run(View.java:21147) 
at android.os.Handler.handleCallback(Handler.java:739) 
at android.os.Handler.dispatchMessage(Handler.java:95) 
at android.os.Looper.loop(Looper.java:148) 
at android.app.ActivityThread.main(ActivityThread.java:5417) 
at java.lang.reflect.Method.invoke(Native Method) 
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726) 
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616) 
Caused by: java.lang.reflect.InvocationTargetException 
at java.lang.reflect.Method.invoke(Native Method) 
at android.view.View$DeclaredOnClickListener.onClick(View.java:4447) 
at android.view.View.performClick(View.java:5198)  
at android.view.View$PerformClick.run(View.java:21147)  
at android.os.Handler.handleCallback(Handler.java:739)  
at android.os.Handler.dispatchMessage(Handler.java:95)  
at android.os.Looper.loop(Looper.java:148)  
at android.app.ActivityThread.main(ActivityThread.java:5417)  
at java.lang.reflect.Method.invoke(Native Method)  
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)  
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)  
Caused by: java.lang.IndexOutOfBoundsException: Invalid index 0, size is 0 
at java.util.ArrayList.throwIndexOutOfBoundsException(ArrayList.java:255) 
at java.util.ArrayList.get(ArrayList.java:308) 
at com.example.hadleigh.googlemapstest.MapsActivity.onSearch(MapsActivity.java:91) 
at java.lang.reflect.Method.invoke(Native Method)  
at android.view.View$DeclaredOnClickListener.onClick(View.java:4447)  
at android.view.View.performClick(View.java:5198)  
at android.view.View$PerformClick.run(View.java:21147)  
at android.os.Handler.handleCallback(Handler.java:739)  
at android.os.Handler.dispatchMessage(Handler.java:95)  
at android.os.Looper.loop(Looper.java:148)  
at android.app.ActivityThread.main(ActivityThread.java:5417)  
+0

Bitte Stack-Trace aus dem Absturz von logcat hinzufügen. –

+0

Ich habe meine Frage bearbeitet – Hadleigh

Antwort

0
public boolean onSearch(View view) { 

    EditText findLocation = (EditText) findViewById(R.id.editText); 
    String location = findLocation.getText().toString(); 
    List<Address> addressList = null; 


    if (location.isEmpty()) { 

     Toast.makeText(getApplicationContext(), "Please enter address", Toast.LENGTH_LONG).show(); 

     return true; 


    }else { 

     //Geocode gecoder = new Geocoder(this) 
     //geocoder.getFromLocationName(location, 1); 
     //then add try and catch 


     Geocoder geocoder = new Geocoder(this); 
     try { 


      addressList = geocoder.getFromLocationName(location, 1); 


      //after try and catch 
      // List<Address> addressList = geocoder.getFromLocationName(location, 1); 


     } catch (IOException e) { 









      e.printStackTrace(); 


     } 
    } 

    Address address = addressList.get(0); 
    LatLng latLng = new LatLng(address.getLatitude(), address.getLongitude()); 
    mMap.addMarker(new MarkerOptions().position(latLng).title(location.toString())); 
    mMap.animateCamera(CameraUpdateFactory.newLatLng(latLng)); 


    return false; 
} 
+0

Das Problem mit Ihrem ursprünglichen Code war es sollte && eher als || , aber isEmpty() wie du hier hast ist besser :) –

+0

Danke, es war schmerzlich herauszufinden, aber es ist endlich geschafft: D – Hadleigh

1

Sie hatte die richtige Logik zu überprüfen, ob Ihr EditText leer war, aber Sie erwarten nach wie vor Ihre addressList gefüllt mit Ergebnissen haben. Sie müssen die addMarker Logik innerhalb der try-catch blocks setzen, oder überprüfen, ob die Adressliste nicht leer ist:

if (addressList != null && !addressList.isEmpty()) { 
    Address address = addressList.get(0); 
    LatLng latLng = new LatLng(address.getLatitude(), address.getLongitude()); 
    mMap.addMarker(new MarkerOptions().position(latLng).title(location.toString())); 
    mMap.animateCamera(CameraUpdateFactory.newLatLng(latLng)); 
}